Nginx的幾個常用配置和技巧
文章列舉了幾個Nginx常見的,實用的,有趣的配置,希望看過之後能說一句:學到了!
一個站點配置多個域名
server
{
listen
80
;
server_name
ops-coffee.cn b.ops-coffee.cn;
}
server_name 後跟多個域名即可,多個域名之間用空格分隔
一個服務配置多個站點
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虛擬主機配置實現,Nginx有三種型別的虛擬主機
基於IP的虛擬主機: 需要你的伺服器上有多個地址,每個站點對應不同的地址,這種方式使用的比較少
基於埠的虛擬主機: 每個站點對應不同的埠,訪問的時候使用ip:port的方式訪問,可以修改listen的埠來使用
基於域名的虛擬主機: 使用最廣的方式,上邊例子中就是用了基於域名的虛擬主機,前提條件是你有多個域名分別對應每個站點,server_name填寫不同的域名即可
nginx新增賬號密碼驗證
server
{
location
/ {
auth_basic
"please input user&passwd"
;
auth_basic_user_file
key/auth.key;
}
}
有很多服務透過nginx訪問,但本身沒有提供賬號認證的功能,就可以透過nginx提供的authbase賬號密碼認證來實現,可以用以下指令碼來生成賬號的密碼
# cat pwd.pl
#!/usr/bin/perl
use
strict;
my
$pw=$ARGV[
] ;
print
crypt
($pw,$pw).
"\n"
;
使用方法:
#
perl pwd.pl ops-coffee.cn
opf8BImqCAXww
#
echo
"admin:opf8BImqCAXww"
> key/auth.key
nginx開啟列目錄
當你想讓nginx作為檔案下載伺服器存在時,需要開啟nginx列目錄
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後,顯示的檔案時間為伺服器時間
預設當訪問列出的txt等檔案時會在瀏覽器上顯示檔案的內容,如果你想讓瀏覽器直接下載,加上下邊的配置
if
(
$request_filename
~* ^.*?\.(txt|pdf|jpg|png)$)
{
add_header
Content-Disposition
'attachment'
;
}
配置預設站點
server
{
listen
80
default;
}
當一個nginx服務上建立了多個虛擬主機時預設會 從上到下 查詢,如果匹配不到虛擬主機則會返回 第一個 虛擬主機的內容,如果你想指定一個預設站點時,可以將這個站點的虛擬主機放在配置檔案中第一個虛擬主機的位置,或者在這個站點的虛擬主機上配置listen default
不允許透過IP訪問
server
{
listen
80
default;
server_name
_;
return
404
;
}
可能有一些未備案的域名或者你不希望的域名將伺服器地址指向了你的伺服器,這時候就會對你的站點造成一定的影響,需要禁止IP或未配置的域名訪問,我們利用上邊所說的default規則,將預設流量都轉到404去
上邊這個方法比較粗暴,當然你也可以配置下所有未配置的地址訪問時直接301重定向到你的網站去,也能為你的網站帶來一定的流量
server
{
rewrite
^/(.*)$
$1
permanent
;
}
直接返回驗證檔案
location
= /XDFyle6tNA.txt {
default_type
text/plain;
return
200
'd6296a84657eb275c05c31b10924f6ea'
;
}
很多時候微信等程式都需要我們放一個txt的檔案到專案裡以驗證專案歸屬,我們可以直接透過上邊這種方式修改nginx即可,無需真正的把檔案給放到伺服器上
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;
}
}
}
稍不注意可能會落入一個
proxy_pass
加槓不加槓的陷阱,這裡詳細說下
proxy_pass
與
proxy_pass /
的區別:
雖然只是一個/的區別但結果確千差萬別。分為以下兩種情況:
1. 目標地址中不帶uri(
proxy_pass
)。此時新的目標url中,匹配的uri部分不做修改,原來是什麼就是什麼。
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 /
,/也是uri),此時新的目標url中,匹配的uri部分將會被修改為該引數中的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開啟keepalive
upstream
tomcat {
server
ops-coffee.cn:
8080
;
keepalive
1024
;
}
server
{
location
/ {
proxy_http_version
1
.
1
;
proxy_set_header
Connection
""
;
proxy_pass
}
}
nginx在專案中大多數情況下會作為反向代理使用,例如nginx後接tomcat,nginx後接php等,這時我們開啟nginx和後端服務之間的keepalive能夠減少頻繁建立TCP連線造成的資源消耗,配置如上
keepalive: 指定每個nginxworker可以保持的最大連線數量為1024,預設不設定,即nginx作為client時keepalive未生效
proxy_http_version 1.1: 開啟keepalive要求HTTP協議版本為HTTP 1.1
proxy_set_header Connection "":
為了相容老的協議以及防止http頭中有
Connection close
導致的keepalive失效,這裡需要及時清掉HTTP頭部的Connection
404自動跳轉到首頁
server
{
location
/ {
error_page
404
=
@ops
-coffee;
}
location
@ops
-coffee {
rewrite
.* /
permanent
;
}
}
網站出現404頁面不是特別友好,我們可以透過上邊的配置在出現404之後給自動跳轉到首頁去
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31560357/viewspace-2644667/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- javascript除錯的幾個常用技巧JavaScript除錯
- 深入 TypeScript – 2( 幾個常用的小技巧)TypeScript
- Nginx與安全有關的幾個配置Nginx
- 老司機常用的幾個JavaScript除錯技巧JavaScript除錯
- 提高js執行效率的幾個常用技巧JS
- nginx常用配置Nginx
- Nginx簡介和常用的一些配置Nginx
- nginx常用配置教程。Nginx
- nginx host常用配置Nginx
- php 和 nginx 的幾個超時時間PHPNginx
- Android工程常用配置和開發技巧Android
- nginx 常用配置記錄Nginx
- nginx 常用配置案例(三)Nginx
- 關於使用plsql操作oracle的一點小技巧和幾個常用的查詢語句SQLOracle
- SCP和Rsync遠端拷貝的幾個技巧
- Nginx常用配置引數的含義Nginx
- 關於使用plsql操作oracle的一點小技巧和幾個常用的查詢語句BUSQLOracle
- GCD常用的幾個方法GC
- 整理的一些常用到的 Nginx 配置Nginx
- 資料庫系統常用的幾個工具和命令資料庫
- JavaScript 常用55個技巧JavaScript
- NGINX的配置和基本使用Nginx
- nginx的編譯和配置Nginx編譯
- 常用的shell命令和使用技巧
- git的幾個常用基本操作Git
- 幾個常用函式的使用函式
- 常用的幾個典型指令碼指令碼
- CSS效能優化的幾個技巧CSS優化
- Swift開發的幾個小技巧Swift
- ppt聲音操作的幾個技巧
- db2move和幾個常用的db2命令DB2
- SQL的基本命令和幾個常用函式彙總SQL函式
- 50個工作中最常用excel技巧 excel常用技巧大全Excel
- 11個常用JS小小技巧JS
- 常用的Linux,記住了幾個?Linux
- 《安全測試常用的幾個工具》
- 幾個常用監控工具的使用
- Git的幾個常用命令Git