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