windows下安装nginx并配置端口转发 + 负载均衡,使用80端口转发多个本机的虚拟域名 您所在的位置:网站首页 端口设置命令 windows下安装nginx并配置端口转发 + 负载均衡,使用80端口转发多个本机的虚拟域名

windows下安装nginx并配置端口转发 + 负载均衡,使用80端口转发多个本机的虚拟域名

2023-07-02 02:43| 来源: 网络整理| 查看: 265

下载nginx

nginx下载地址:http://nginx.org/en/download.html

当前最新版本为nginx-1.20.0

 

启动nginx

下后nginx后解压【nginx-1.20.0.zip】到你指定的目录。

 打开cmd命令行窗口,进入nginx解压目录,在cmd窗口中输入【nginx.exe】或【start nginx】命令启动nginx,推荐在用【start nginx】命令,因为它是后台启动方式。

在浏览器地址栏中输入localhost:80查看nginx启动效果:

 看到这个页面说明nginx已经启动成功。

 这个时候可以关掉cmd窗口,nginx仍然在运行状态,不会退出。

 

 也可以在cmd窗口中输入命令【tasklist /fi "imagename eq nginx.exe" 】,查看启动状态。

 

如果启动报错,是80端口被其它应用程序占用了,此是要关闭其它应用程序,把80端口让出来,然后征新启动nginx 。

nginx: [emerg] bind() to 0.0.0.0:80 failed (10013: An attempt was made to access a socket in a way forbidden by its access permissions)

 检查80端口是否被占用的命令是:【 netstat -ano | findstr 0.0.0.0:80 】,或 【netstat -ano | findstr "80"】。

配置本机域名

要通过域名访问网站,生产环境必须申请域名,然后把域名指向外网服务器的ip。

但是在开发环境,而且是在内网,申请域名也不好使,那么如何在内网环境使用域名访问呢?

解决办法是,修改hosts配置文件,

用文本编辑器打开 C:\Windows\System32\drivers\etc\hosts  文件,添加两个域名指向本机127.0.0.1的域名,

#在本机的hosts文件配置 127.0.0.1 local-crm.021sports.com 127.0.0.1 local-mall.021sports.com

 

如果要添加访问内网其它服务器的域名,就将其它服务器的ip替换127.0.0.1(比如10.10.61.169),同时,10.10.61.169这台服务器也要配置hosts,

#在本机的hosts文件配置 10.10.61.169 dev-crm.021sports.com 10.10.61.169 dev-mall.021sports.com

 (本机的hosts配置) 

 

如果要在本机可以访问内网10.10.61.169这台服务器的两个域名dev-crm.021sports.com及dev-mall.021sports.com,那么同时需要配置10.10.61.169服务器的hosts,

#同时必须在10.10.61.169服务器的hosts文件里配置 127.0.0.1 dev-crm.021sports.com 127.0.0.1 dev-mall.021sports.com

   (10.10.61.169服务器的hosts配置)

 

配置完成后,在本机就可以同时访问四个域名了。

 

配置反向代理端口转发 + 负载均衡

nginx的配置文件是 conf/nginx.config 。

现在,我们要配置两个域名转发,

第一个域名 local-crm.021sports.com 转发到本机的 http:/、127.0.0.115900 站点,

第二个域名 local-mall.021sports.com 转到发本机的 http://127.0.0.1:55888 站点,

域名local-crm.021sports.com与域名local-mall.021sports.com是没带端口号的,表示默认用 80端口。

步骤:

(1)添加两个server配置

在http{}节点中,添加两个server配置,分别对应两个域名。

server { listen 80; server_name local-crm.021sports.com; location / { proxy_pass http://local-crm; } } server { listen 80; server_name local-mall.021sports.com; location / { proxy_pass http://local-mall; } }

listen:对外访问的端口。

server_name:对外访问的域名。

proxy_pass:转发的请求地址,可以是静态域名,也可以是变量。

 

(2) 添加两个upstream节点

然后,在http{}节点中,添加两个upstream配置,对应负载均衡。 

upstream local-crm { server 127.0.0.1:15900 weight=1; server 127.0.0.1:15900 weight=1; server 127.0.0.1:15900 weight=1; } upstream local-mall { server 127.0.0.1:55888 weight=1; server 127.0.0.1:55888 weight=1; server 127.0.0.1:55888 weight=1; }

server:负载均衡节点,有几个节点就添加几个。

weight:权重

注意:本地站点host必须使用127.0.0.1,而不能使用localhost,因为windows 10系统,在cmd窗口ping localhost,它的ip不是127.0.0.1,而是IPV6地址::1,所以nginx找不到这个主机,会报Invalid Hostname的错误。

 

 

那么在浏览器中访问local-mall.021sports.com,或访问local-crm.021sports.com域名的的时候,会报Invalid Hostname的错误。

 

 

 (3) 整体配置是:

http { server_names_hash_bucket_size 128; upstream local-crm { server 127.0.0.1:15900 weight=1; server 127.0.0.1:15900 weight=1; server 127.0.0.1:15900 weight=1; } upstream local-mall { server 127.0.0.1:55888 weight=1; server 127.0.0.1:55888 weight=1; server 127.0.0.1:55888 weight=1; } server { listen 80; server_name local-crm.021sports.com; location / { # 如果不用负载, 直接写域名 proxy_pass http://127.0.0.1:15900; proxy_pass http://local-crm; proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-NginX-Proxy true; } } server { listen 80; server_name local-mall.021sports.com; location / { # 如果不用负载, 直接写域名 proxy_pass http://127.0.0.1:55888; proxy_pass http://local-mall; proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-NginX-Proxy true; } } }

 

然后在cmd命令窗口中输入【nginx -s reload】重载配置文件。

如果执行nginx -s reload命令后,输出如下错误信息: 

nginx: [emerg] could not build server_names_hash, you should increase server_names_hash_bucket_size: 32

这段提示信息是说需要增加服务器名字哈希别名的大小。如何解决呢,

在配置文件【conf/nginx.config】的http{}段增加一行配置 server_names_hash_bucket_size 64; 如果64还不够,那么就按32的倍数往上加。

http { server_names_hash_bucket_size 64; ..... }

注意:数值必须是32的倍数。

再次执行命令【nginx -s reload】

 

nginx命令介绍

【查看nginx是否启动】 

tasklist /fi "imagename eq nginx.exe"

  

【启动nginx】

start nginx 

nginx.exe

 

【停止nginx】

从容停止服务(此命令不一定能杀死nginx进程)这种方法较stop相比就比较温和一些了,需要进程完成当前工作后再停止。nginx -s quit

 

立即停止服务(此命令不一定能杀死nginx进程)这种方法比较强硬,无论进程是否在工作,都直接停止进程。nginx -s stop

 

使用taskkill命令杀死nginx进程(此命令管用,可以杀死nginx)

taskkill /f /t /im nginx.exe

 

【重新加载配置】nginx -s reload

 

【Linux命令】

启动nginx

systemctl start nginx.service

systemctl 停止systemctl stop nginx.service

 

重启nginxsystemctl restart nginx.service

 

查看端口号netstat -tlnp | grep nginx

 



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有