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