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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM