前言
文章列舉了幾個Nginx常見的,實用的,有趣的配置,希望看過之后能說一句:學(xué)到了!
一個站點配置多個域名
1
2
3
4
|
server { listen 80; server_name ops-coffee.cn b.ops-coffee.cn; } |
server_name 后跟多個域名即可,多個域名之間用空格分隔
一個服務(wù)配置多個站點
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
server { listen 80; server_name a.ops-coffee.cn; location / { root /home/project/pa ; index index.html; } } server { listen 80; server_name ops-coffee.cn b.ops-coffee.cn; location / { root /home/project/pb ; index index.html; } } server { listen 80; server_name c.ops-coffee.cn; location / { root /home/project/pc ; index index.html; } } |
基于Nginx虛擬主機配置實現(xiàn),Nginx有三種類型的虛擬主機
基于IP的虛擬主機: 需要你的服務(wù)器上有多個地址,每個站點對應(yīng)不同的地址,這種方式使用的比較少
基于端口的虛擬主機: 每個站點對應(yīng)不同的端口,訪問的時候使用ip:port的方式訪問,可以修改listen的端口來使用
基于域名的虛擬主機: 使用最廣的方式,上邊例子中就是用了基于域名的虛擬主機,前提條件是你有多個域名分別對應(yīng)每個站點,server_name填寫不同的域名即可
nginx添加賬號密碼驗證
1
2
3
4
5
6
|
server { location / { auth_basic "please input user&passwd" ; auth_basic_user_file key /auth .key; } } |
有很多服務(wù)通過nginx訪問,但本身沒有提供賬號認證的功能,就可以通過nginx提供的authbase賬號密碼認證來實現(xiàn),可以用以下腳本來生成賬號的密碼
1
2
3
4
5
6
|
# cat pwd.pl #!/usr/bin/perl use strict; my $pw=$ARGV[0] ; print crypt($pw,$pw). "\n" ; |
使用方法:
1
2
3
|
# perl pwd.pl ops-coffee.cn opf8BImqCAXww # echo "admin:opf8BImqCAXww" > key/auth.key |
nginx開啟列目錄
當你想讓nginx作為文件下載服務(wù)器存在時,需要開啟nginx列目錄
1
2
3
4
5
6
7
8
|
server { location download { autoindex on; autoindex_exact_size off; autoindex_localtime on; } } |
autoindex_exact_size: 為on(默認)時顯示文件的確切大小,單位是byte;改為off顯示文件大概大小,單位KB或MB或GB
autoindex_localtime: 為off(默認)時顯示的文件時間為GMT時間;改為on后,顯示的文件時間為服務(wù)器時間
默認當訪問列出的txt等文件時會在瀏覽器上顯示文件的內(nèi)容,如果你想讓瀏覽器直接下載,加上下邊的配置
1
2
3
|
if ($request_filename ~* ^.*?\.(txt|pdf|jpg|png)$) { add_header Content-Disposition 'attachment' ; } |
配置默認站點
1
2
3
|
server { listen 80 default; } |
當一個nginx服務(wù)上創(chuàng)建了多個虛擬主機時默認會從上到下查找,如果匹配不到虛擬主機則會返回第一個虛擬主機的內(nèi)容,如果你想指定一個默認站點時,可以將這個站點的虛擬主機放在配置文件中第一個虛擬主機的位置,或者在這個站點的虛擬主機上配置listen default
不允許通過IP訪問
1
2
3
4
5
6
|
server { listen 80 default; server_name _; return 404; } |
可能有一些未備案的域名或者你不希望的域名將服務(wù)器地址指向了你的服務(wù)器,這時候就會對你的站點造成一定的影響,需要禁止IP或未配置的域名訪問,我們利用上邊所說的default規(guī)則,將默認流量都轉(zhuǎn)到404去
上邊這個方法比較粗暴,當然你也可以配置下所有未配置的地址訪問時直接301重定向到你的網(wǎng)站去,也能為你的網(wǎng)站帶來一定的流量
1
2
3
|
server { rewrite ^/(.*)$ https: //ops-coffee .cn/$1 permanent; } |
直接返回驗證文件
1
2
3
4
|
location = /XDFyle6tNA .txt { default_type text /plain ; return 200 'd6296a84657eb275c05c31b10924f6ea' ; } |
很多時候微信等程序都需要我們放一個txt的文件到項目里以驗證項目歸屬,我們可以直接通過上邊這種方式修改nginx即可,無需真正的把文件給放到服務(wù)器上
nginx配置upstream反向代理
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
http { ... upstream tomcats { server 192.168.106.176 weight=1; server 192.168.106.177 weight=1; } server { location /ops-coffee/ { proxy_pass http: //tomcats ; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } } } |
稍不注意可能會落入一個proxy_pass加杠不加杠的陷阱,這里詳細說下proxy_pass http://tomcats與proxy_pass http://tomcats/的區(qū)別:
雖然只是一個/的區(qū)別但結(jié)果確千差萬別。分為以下兩種情況:
1. 目標地址中不帶uri(proxy_pass http://tomcats)。此時新的目標url中,匹配的uri部分不做修改,原來是什么就是什么。
1
2
3
4
5
6
|
location /ops-coffee/ { proxy_pass http: //192 .168.106.135:8181; } http: //domain/ops-coffee/ --> http: //192 .168.106.135:8181 /ops-coffee/ http: //domain/ops-coffee/action/abc --> http: //192 .168.106.135:8181 /ops-coffee/action/abc |
2. 目標地址中帶uri(proxy_pass http://tomcats/,/也是uri),此時新的目標url中,匹配的uri部分將會被修改為該參數(shù)中的uri。
1
2
3
4
5
6
|
location /ops-coffee/ { proxy_pass http: //192 .168.106.135:8181/; } http: //domain/ops-coffee/ --> http: //192 .168.106.135:8181 http: //domain/ops-coffee/action/abc --> http: //192 .168.106.135:8181 /action/abc |
nginx upstream開啟keepalive
1
2
3
4
5
6
7
8
9
10
11
12
13
|
upstream tomcat { server ops-coffee.cn:8080; keepalive 1024; } server { location / { proxy_http_version 1.1; proxy_set_header Connection "" ; proxy_pass http: //tomcat ; } } |
nginx在項目中大多數(shù)情況下會作為反向代理使用,例如nginx后接tomcat,nginx后接php等,這時我們開啟nginx和后端服務(wù)之間的keepalive能夠減少頻繁創(chuàng)建TCP連接造成的資源消耗,配置如上
keepalive: 指定每個nginxworker可以保持的最大連接數(shù)量為1024,默認不設(shè)置,即nginx作為client時keepalive未生效
proxy_http_version 1.1: 開啟keepalive要求HTTP協(xié)議版本為HTTP 1.1
proxy_set_header Connection "": 為了兼容老的協(xié)議以及防止http頭中有Connection close導(dǎo)致的keepalive失效,這里需要及時清掉HTTP頭部的Connection
404自動跳轉(zhuǎn)到首頁
1
2
3
4
5
6
7
8
9
|
server { location / { error_page 404 = @ops-coffee; } location @ops-coffee { rewrite .* / permanent; } } |
網(wǎng)站出現(xiàn)404頁面不是特別友好,我們可以通過上邊的配置在出現(xiàn)404之后給自動跳轉(zhuǎn)到首頁去
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,謝謝大家對服務(wù)器之家的支持。
原文鏈接:https://mp.weixin.qq.com/s/JyUnN_OtQ2NtXcH0mtCJUg