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

下载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

 

重启nginx
systemctl restart nginx.service

 

查看端口号
netstat -tlnp | grep nginx

 

posted @ 2021-04-26 09:56  民工黑猫  阅读(2823)  评论(0编辑  收藏  举报