windows下nginx如何操作命令
windows下nginx操作命令
1:?jiǎn)?dòng)nginx
進(jìn)入nginx 文件夾
此處使用管理員CMD 鍵入start nginx 看到cmd窗口一閃而過(guò)即為啟動(dòng)成功
2:停止 nginx
stop nginx
3:殺死全部nginx 進(jìn)程
taskkill /f /t /im nginx.exe(重要)
4:重新加載nginx.conf文件
nginx -s reload
nginx的啟動(dòng)安裝和常用配置例子
由于自己的之前學(xué)習(xí) nginx 只會(huì)簡(jiǎn)單使用,然后每次配置 nginx 都要找文檔去了解怎么配置,有點(diǎn)麻煩,所以這里記錄下一些常用的nginx 配置和配置的例子,到時(shí)候直接 copy 修改即可
nginx 的主要功能為 靜態(tài)文件的服務(wù)器、負(fù)載均衡、重寫或重定向url、正向代理、反向代理 等。
這里使用的 nginx 版本為 1.16.0
配置文件的主要結(jié)構(gòu)為:
nginx.conf
http{ # 這個(gè)用于負(fù)載均衡的配置 upstream backend { server backend1.example.com weight=5; server backend2.example.com:8080; server backup2.example.com:8080 backup; } # 服務(wù)配置1,我們一般只要修改這里的信息即可 server{ listen 8080; location / { proxy_pass http://localhost:8080; } } # 這個(gè) server 是服務(wù)配置2 server{ listen 80; location ~ \.(gif|jpg|png)$ { proxy_pass http://backend; } } # includ 用來(lái)引入 nginx 在其他目錄的配置文件,一般正式的公司項(xiàng)目會(huì)這樣使用,并以每個(gè)域名或 server 塊分成每個(gè)配置文件。 include cust_conf/mainconf; # 加多一個(gè)確定的文件,這樣找不到文件的時(shí)候會(huì)報(bào)錯(cuò),以免配置錯(cuò)目錄 includ /data/host/config/*.conf; }
啟動(dòng)相關(guān)
window 啟動(dòng)
cmd命令進(jìn)入安裝文件;
1、啟動(dòng):C:\server\nginx-1.0.2>start nginx 或C:\server\nginx-1.0.2>nginx.exe
注:建議使用第一種,第二種會(huì)使你的cmd窗口一直處于執(zhí)行中,不能進(jìn)行其他命令操作。
nginx 命令行參數(shù)
不像許多其他軟件系統(tǒng),Nginx 僅有幾個(gè)命令行參數(shù),完全通過(guò)配置文件來(lái)配置
-c
</path/to/config> 為 Nginx 指定一個(gè)配置文件,來(lái)代替缺省的。-t
不運(yùn)行,而僅僅測(cè)試配置文件。nginx 將檢查配置文件的語(yǔ)法的正確性,并嘗試打開(kāi)配置文件中所引用到的文件。用法:nginx -t, 這個(gè)命令也可以查看nginx文件的所在位置。-v
顯示 nginx 的版本。-V
顯示 nginx 的版本,編譯器版本和配置參數(shù)。
啟動(dòng)、停止 和重新加載配置
通過(guò)執(zhí)行 nginx 的可執(zhí)行文件可以直接啟動(dòng) nginx。只要 nginx 啟動(dòng)了,則可以通過(guò)執(zhí)行 nginx 加 -s 參數(shù)來(lái)控制 nginx 的一些行為。用法如下:
nginx -s ${signal}
${signal} 可以為以下四個(gè)值:
stop
— fast shutdown 快速停止quit
— graceful shutdown 優(yōu)雅停止reload
— reloading the configuration file 重新加載配置文件reopen
— reopening the log files 重新打開(kāi)日志文件
例如:可以通過(guò)執(zhí)行 nginx -s reload 來(lái)重新加載配置文件,使更改過(guò)的配置文件生效。
靜態(tài)文件的服務(wù)器
前端文件或者圖片服務(wù)的部署,一般會(huì)使用到這個(gè)功能,通過(guò) nginx 服務(wù)器來(lái)分發(fā)(sering out)文件,然后用戶從網(wǎng)絡(luò)上能夠通過(guò) ip 或 域名直接訪問(wèn)到
1. 實(shí)現(xiàn)訪問(wèn) stats-server.kanlon.com 實(shí)現(xiàn)將 /data/fr 下的目錄作為靜態(tài)文件訪問(wèn)
server { # 訪問(wèn)端口81,并且訪問(wèn)的域名為 stats-server.kanlon.com 使用該配置 listen 81; server_name stats-server.kanlon.com; charset utf8; # 設(shè)置自動(dòng)查找index文件為false,避免安全性問(wèn)題 autoindex off; # 設(shè)置展示首頁(yè)的文件 index index.html index.htm index.php; # 如果是/img/ 路徑,則轉(zhuǎn)發(fā)到專門存放圖片的路徑/data/img/中 location /img/ { alias /data/img/; } location / { root /data/fr; } }
如果訪問(wèn)出現(xiàn)錯(cuò)誤,可以看一下 logs/error.log 的錯(cuò)誤日志,這里會(huì)打印出實(shí)際訪問(wèn)的文件路徑。還有測(cè)試 nginx 的時(shí)候一定要注意是否啟動(dòng)了多個(gè) nginx 否則可能更改了配置會(huì)以為自己設(shè)置錯(cuò)誤不生效的(沉重教訓(xùn))
負(fù)載均衡
通過(guò) nginx 可以實(shí)現(xiàn)將請(qǐng)求自動(dòng)轉(zhuǎn)發(fā)都自己的指定的服務(wù)域名上,減少單臺(tái)服務(wù)請(qǐng)求量和實(shí)現(xiàn)服務(wù)的高可用。
nginx 上默認(rèn)是通過(guò) ngx_http_upstream_module 模塊實(shí)現(xiàn)
1. 配置訪問(wèn) load-balancing-test.kanlon.com:83 則負(fù)載均衡到指定三個(gè)域名上
負(fù)載的三個(gè)域名地址:load-balancing-test-1.kanlon.com:84,load-balancing-test-2.kanlon.com:85,load-balancing-test-3.kanlon.com:86
其中 要求 load-balancing-test-3.kanlon.com:86 作為備份服務(wù),load-balancing-test.kanlon.com-1:84 和load-balancing-test-2.kanlon.com:85 的請(qǐng)求數(shù)分布比例為 1:2
# 配置健康檢查,當(dāng)為502,503,504,404的時(shí)候表示服務(wù)不可用,60秒內(nèi)有兩個(gè)這樣的失敗請(qǐng)求則負(fù)載到另一個(gè)服務(wù)上 proxy_next_upstream http_502 http_503 http_504 http_404 error timeout invalid_header; upstream balancing { server load-balancing-test-1.kanlon.com:84 max_fails=1 fail_timeout=60s weight=1; server load-balancing-test-2.kanlon.com:85 max_fails=2 fail_timeout=60s weight=2; server load-balancing-test-3.kanlon.com:86 backup; } server { # 訪問(wèn)端口83,并且訪問(wèn)的域名為 load-balancing-test.kanlon.com 使用該配置 listen 83; server_name load-balancing-test.kanlon.com; # 設(shè)置自動(dòng)查找index文件為false,避免安全性問(wèn)題 autoindex off; # 設(shè)置展示首頁(yè)的文件 index index.html index.htm index.php; location / { proxy_pass http://balancing; } } server { # 訪問(wèn)端口84,并且訪問(wèn)的域名為 load-balancing-test-1.kanlon.com 使用該配置 listen 84; server_name load-balancing-test-1.kanlon.com; charset utf8; # 設(shè)置自動(dòng)查找index文件為false,避免安全性問(wèn)題 autoindex off; # 設(shè)置展示首頁(yè)的文件 index index.html index.htm index.php; location / { # 通過(guò)在目錄后面加上沒(méi)有文件的目錄可以模擬服務(wù)不可用 root /data/nginx/load-balancing/load-balancing-test-1; } } server { # 訪問(wèn)端口85,并且訪問(wèn)的域名為 load-balancing-test-2.kanlon.com 使用該配置 listen 85; server_name load-balancing-test-2.kanlon.com; charset utf8; # 設(shè)置自動(dòng)查找index文件為false,避免安全性問(wèn)題 autoindex off; # 設(shè)置展示首頁(yè)的文件 index index.html index.htm index.php; location / { # 通過(guò)在目錄后面加上沒(méi)有文件的目錄可以模擬服務(wù)不可用 root /data/nginx/load-balancing/load-balancing-test-2; } } server { # 訪問(wèn)端口86,并且訪問(wèn)的域名為 load-balancing-test-3.kanlon.com 使用該配置 listen 86; server_name load-balancing-test-3.kanlon.com; charset utf8; # 設(shè)置自動(dòng)查找index文件為false,避免安全性問(wèn)題 autoindex off; # 設(shè)置展示首頁(yè)的文件 index index.html index.htm index.php; location / { root /data/nginx/load-balancing/load-balancing-test-3; } }
其中的包含了一些 nginx 的健康檢查的指令
max_fails=number 設(shè)定Nginx與服務(wù)器通信的嘗試失敗的次數(shù)。在fail_timeout參數(shù)定義的時(shí)間段內(nèi),如果失敗的次數(shù)達(dá)到此值,Nginx就認(rèn)為服務(wù)器不可用。在下一個(gè)fail_timeout時(shí)間段,服務(wù)器不會(huì)再被嘗試。 失敗的嘗試次數(shù)默認(rèn)是1。設(shè)為0就會(huì)停止統(tǒng)計(jì)嘗試次數(shù),認(rèn)為服務(wù)器是一直可用的。 你可以通過(guò)指令proxy_next_upstream、fastcgi_next_upstream和 memcached_next_upstream來(lái)配置什么是失敗的嘗試。 默認(rèn)配置時(shí),http_404狀態(tài)不被認(rèn)為是失敗的嘗試。
fail_timeout=time 設(shè)定服務(wù)器被認(rèn)為不可用的時(shí)間段以及統(tǒng)計(jì)失敗嘗試次數(shù)的時(shí)間段。在這段時(shí)間中,服務(wù)器失敗次數(shù)達(dá)到指定的嘗試次數(shù),服務(wù)器就被認(rèn)為不可用。
重寫或重定向 url
nginx 可以將匹配的 url 重定向到另外的 url 去,包含改變地址
指定地址重定向
將 rewrite-local.kanlon.com/rewrite/same/site/** 重定向到 rewrite-local.kanlon.com/rewrite2/same/site/** 和 將 rewrite-local.kanlon.com/rewrite/other/site 重定向到 rewrite-other.kanlon.com/rewrite2/same/site
server { # 訪問(wèn)端口88,并且訪問(wèn)的域名為 rewrite-local.kanlon.com 使用該配置 listen 88; server_name rewrite-local.kanlon.com; charset utf8; # 設(shè)置自動(dòng)查找index文件為false,避免安全性問(wèn)題 autoindex off; # 設(shè)置展示首頁(yè)的文件 index index.html index.htm index.php; # 轉(zhuǎn)發(fā)到本域名的其它路徑 location /rewrite/same/site { rewrite ^/rewrite/same/site(.*)$ /rewrite2/same/site$1 last; } # 轉(zhuǎn)發(fā)到另外的域名,如果要 重定向,; 前面加上 permanent (永久重定向 301 即可),默認(rèn)為 302 臨時(shí)重定向 location /rewrite/other/site { rewrite ^/rewrite/other/site(.*)$ http://rewrite-other.kanlon.com:89/rewrite2/same/site$1 permanent; } location /rewrite2/same/site { default_type text/html; return 200 "$request_uri"; } location / { root /data/nginx/rewrite-test/rewriter-local; } } server { # 訪問(wèn)端口89,并且訪問(wèn)的域名為 rewrite-other.kanlon.com 使用該配置 listen 89; server_name rewrite-other.kanlon.com; charset utf8; # 設(shè)置自動(dòng)查找index文件為false,避免安全性問(wèn)題 autoindex off; # 設(shè)置展示首頁(yè)的文件 index index.html index.htm index.php; location /rewrite2/same/site { default_type text/html; return 200 "$request_uri"; } location / { root /data/nginx/rewrite-test/rewriter-other; } }
正向代理
正向代理,就是好像我們平常使用的 vpn 那樣,我們的訪問(wèn)的域名不會(huì)變,只不過(guò)通過(guò) nginx 來(lái)幫我們發(fā)送請(qǐng)求和接收請(qǐng)求,并返回自己客戶端。nginx 默認(rèn)支持 http 協(xié)議的正向代理,如果要支持 https 需要安裝組件。
nginx 配置如下:
server { ? ? listen ? ? ? 90; ? ? server_name ?forward-agent.kanlon.com; ? ? # 這里配置 DNS 服務(wù)器的IP地址 ? ? resolver 8.8.8.8; ? ? location / { ? ? ? ? proxy_pass http://$http_host$request_uri; ? ? } }
然后,再在自己電腦上配置代理服務(wù)器和端口,即可完成正向代理。
反向代理
反向代理,則直接訪問(wèn) nginx 的域名來(lái)替代訪問(wèn)自己原來(lái)的要訪問(wèn)資源的域名,然后得到原資源的域名返回的結(jié)果
這樣則訪問(wèn) reverse-proxy.kanlon.com/abc -> http://127.0.0.1:8080/abc
server { listen 91; server_name reverse-proxy.kanlon.com; #設(shè)置代理 location / { proxy_pass http://127.0.0.1:8080/; } }
下面的配置則為 訪問(wèn) reverse-proxy.kanlon.com/abc -> http://127.0.0.1:8080/test/abc
server { ? ? listen ? ? ? 91; ? ? server_name ?reverse-proxy.kanlon.com; ? ? #設(shè)置代理 ? ? location / { ? ? ? ? proxy_pass http://127.0.0.1:8080/test/; ? ? } }
注意:最好保持 locate 后面有/ 與 proxy_pass 后面有 / ,這樣保持轉(zhuǎn)發(fā)的路徑一樣,不然如果proxy_pass 后面沒(méi) / 的話,例如:
server { ? ? listen ? ? ? 91; ? ? server_name ?reverse-proxy.kanlon.com; ? ? #設(shè)置代理 ? ? location / { ? ? ? ? proxy_pass http://127.0.0.1:8080/test; ? ? } }
則訪問(wèn)時(shí)候會(huì)變成 reverse-proxy.kanlon.com/abc -> http://127.0.0.1:8080/testabc
配置支持websocket(添加后不會(huì)影響普通請(qǐng)求的)
首先需要在nginx 主文件中,http 塊增加以下配置。表示如果帶有upgrade 頭,則升級(jí)為請(qǐng)求,否則不;因?yàn)閣ebsocket請(qǐng)求是基于http請(qǐng)求來(lái)實(shí)現(xiàn),會(huì)通過(guò)普通http請(qǐng)求來(lái)升級(jí)
? ? ? ? ## ? ? ? ? # websocket Settings ? ? ? ? ## ? ? ? ? # 如果沒(méi)有Upgrade頭,則$connection_upgrade為close,否則為upgrade ? ? ? ? map $http_upgrade $connection_upgrade { ? ? ? ? ? default upgrade; ? ? ? ? ? '' close; ? ? ? ? }
另外需要再server -> location 模塊中添加上下面兩個(gè)設(shè)置請(qǐng)求頭的配置
proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection $connection_upgrade;
具體可以一個(gè)例子可以參考下面的配置
server { ? ? listen 80; ? ? server_name abc.kanlon.ink ?superset.kanlon.top; ? ? charset utf8; ? ? index ?index.html index.htm index.php; ? ? location / { ? ? ? ? ?proxy_pass http://localhost:8088; ? ? ? ? ?proxy_http_version 1.1; ? ? ? ? ?proxy_redirect off; ? ? ? ? ?proxy_set_header Host $host; ? ? ? ? ?proxy_set_header X-Real-IP $remote_addr; ? ? ? ? ?proxy_read_timeout 3600s; ? ? ? ? ?proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; ? ? ? ? ?# 主要是下面兩個(gè)的配置 ? ? ? ? ?proxy_set_header Upgrade $http_upgrade; ? ? ? ? ?proxy_set_header Connection $connection_upgrade; ? ? } }
隱藏文件的實(shí)際后綴
有時(shí)候我們想讓訪問(wèn)靜態(tài)html文件的時(shí)候,需要隱藏掉后綴.html,可以像下面這樣配置
server { ? ? listen 81; ? ? charset utf8; ? ? autoindex off; ? ? index ?index.html index.htm index.php; ? ? try_files $uri $uri/ /index.html?$query_string; ? ? # 如果是以html或者 htm 結(jié)尾,則直接返回對(duì)應(yīng)文件,以免引起nginx循環(huán)查找 ? ? location ~ \.(htm|html)$ { ? ? ? root ?/data/nginx_static; ? ? } ? ? location / { ? ? ? # 如果訪問(wèn)的文件不存在,則通過(guò)訪問(wèn)時(shí)添加后綴來(lái)隱藏URL中的后綴 ? ? ? if (!-e $request_filename){ ? ? ? ? ?rewrite ^(.*)$ /$1.html last;? ? ? ? ? ?break; ? ? ? }? ? ? ? root ?/data/nginx_static; ? ? } }
這樣的話,假設(shè)項(xiàng)目根目錄下有l(wèi)ogin.html 文件,原只能通過(guò)訪問(wèn) 127.0.0.1/login.html 訪問(wèn)到,設(shè)置之后,通過(guò) 127.0.0.1/login 或者 127.0.0.1/login.html 都能訪問(wèn)到
使用nginx的一些注意事項(xiàng)
nginx 配置的if函數(shù)不支持嵌套(if(1=1){if(a=b){})和多條件and 、or 等條件拼接(if(1=1 and 2=2))。
如果要實(shí)現(xiàn)多條件判斷,一般使用一個(gè)中間變量來(lái)實(shí)現(xiàn),如下示例,就是實(shí)現(xiàn)了當(dāng)訪問(wèn)域名為根目錄的時(shí)候,如果域名地址不是以home開(kāi)頭的并且?guī)в胁樵儏?shù)時(shí),則強(qiáng)制跳轉(zhuǎn)到對(duì)應(yīng)的域名;
?? ?location = / { ?? ??? ?set $need_redirect 0; ?? ??? ?if ($query_string) { ?? ??? ??? ? ?set $need_redirect 1; ?? ??? ?} ?? ??? ?# 如果是home開(kāi)頭的域名,則不用跳轉(zhuǎn);否則為其他開(kāi)頭的域名,都需要跳轉(zhuǎn)到home(并且在查詢參數(shù)存在的時(shí)候) ?? ??? ?if ($host ~ "^home(.*)") {? ?? ??? ??? ? ?set $need_redirect 0; ?? ??? ?} ?? ??? ?if ($need_redirect) { ?? ??? ??? ? ?rewrite ^/(.*)$ http://home-test.kanlon.ink/$1 last; ?? ??? ?} ?? ?}
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
通過(guò)Nginx代理轉(zhuǎn)發(fā)配置實(shí)現(xiàn)跨域的方法(API代理轉(zhuǎn)發(fā))
這篇文章主要給大家介紹了關(guān)于如何通過(guò)Nginx代理轉(zhuǎn)發(fā)配置實(shí)現(xiàn)跨域(API代理轉(zhuǎn)發(fā))的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Nginx具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-11-11前端加載訪問(wèn)速度優(yōu)化詳細(xì)指南(Nginx)
在前端開(kāi)發(fā)中,優(yōu)化頁(yè)面加載速度成為了開(kāi)發(fā)者的一項(xiàng)重要任務(wù),下面這篇文章主要給大家介紹了關(guān)于前端加載訪問(wèn)速度優(yōu)化(Nginx)的相關(guān)資料,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-06-06Nginx如何實(shí)現(xiàn)對(duì)城市以及指定IP的訪問(wèn)限制
本文介紹了如何使用Nginx代理MySQL連接并限制可訪問(wèn)IP,以及如何通過(guò)第三方模塊ngx_http_geoip2_module實(shí)現(xiàn)基于國(guó)家/城市訪問(wèn)限制2025-03-03nginx配置域名轉(zhuǎn)發(fā)到其他域名的幾種方法小結(jié)
本文主要介紹了nginx配置域名轉(zhuǎn)發(fā)到其他域名的幾種方法小結(jié),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-06-06Nginx 502 Bad Gateway錯(cuò)誤常見(jiàn)的4種原因和解決方法
這篇文章主要介紹了Nginx 502 Bad Gateway錯(cuò)誤常見(jiàn)的4種原因和解決方法,本文適用FastCGI環(huán)境,其中多數(shù)原因通過(guò)配置相關(guān)參數(shù)即可解決,需要的朋友可以參考下2015-05-05詳解Nginx中HTTP的keepalive相關(guān)配置
這篇文章主要介紹了Nginx中HTTP的keepalive相關(guān)配置,以及Nginx的Httpd守護(hù)進(jìn)程相關(guān)的keepalive timeout配置,需要的朋友可以參考下2016-01-01Nginx+Lua腳本+Redis 實(shí)現(xiàn)自動(dòng)封禁訪問(wèn)頻率過(guò)高IP
本文主要介紹了如何使用OpenResty+Lua進(jìn)行動(dòng)態(tài)封禁IP的解決方案,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2024-10-10