Nginx常用功能介紹
- Nginx反向代理應用實例
反向代理(Reverse Proxy)方式是指通過代理服務器來接受Internet上的連接請求,然后將請求轉發給內部網絡上的服務器,並且從內部網絡服務器上得到的結果返回給Internet上請求連接的客戶端,此時代理服務器對外就表現為一台服務器。當一台代理服務器能夠代理外部網絡上的訪問請求來訪問內部網絡時,這種代理服務器的方式成為反向代理服務。反向代理服務器經常用於web服務器,此時代理服務器在外部網絡看來就是一台web服務器,而實際上反向代理服務器並沒有保存任何網頁的真實數據,所有的靜態網頁和動態程序都保存在內部網絡的web服務器上。因此,對反向代理服務器的攻擊並不會使web網站數據遭到破壞,這在一定程度上增強了web服務器的安全性。
反向代理服務器通常也稱為web服務加速器,此時反向代理服務器就具有了代理緩存的功能,也就是說,反向代理服務器在接收客戶端的請求后,首先從源服務器(內部網絡上的web服務器)上獲取內容,然后把內容返回給用戶,同時,也會把內容保存到代理服務器上一份,這樣日后再接收同樣的信息請求時,他會把本地緩存里的內容直接發給用戶,以此減少后端web服務器的壓力,提高響應速度。這其實就是緩存服務器所實現的功能。
1.1多域名跳轉應用實例
多域名跳轉的需求在web應用配置中經常會用到,Apache雖然也可以實現類似功能,但是實現比較復雜,而通過nginx可以輕松實現。
這里列舉一個簡單的應用實例。假設一個網站有2個域名,分別是www.fjp.com和www.gxl.com,要實現當用戶訪問域名www.fjp.com請求通過nginx代理到192.168.66.90的8080端口的web目錄下,而當管理員訪問www.fjp.com/admin時請求代理到192.168.66.90的8080端口的admin目錄下,而當用戶訪問www.gxl.com時將請求代理到192.168.66.90的8080端口的wap目錄下。只需要再nginx配置中做如下設置即可。
為了重點說明反向代理的配置。這里僅列出nginx配置文件中的server配置段,而省略了其他段的配置:
server www.fjp.com
location / {
proxy_pass http:192.168.66.90:8080/web/;
}
location /admin {
proxy_pass http:192.168.66.90:8080/admin;
}
server www.gxl.com
location / {
proxy_pass http:192.168.66.90:8080/wap/;
}
1.2通過nginx重定向實現新舊域名過渡
在web應用中,需要網頁重定向的情況有很多種,例如網頁目錄結構變動,網頁的擴展名改變,網站域名改變,網頁重命名等。當因為某種需求,需將網站老的域名用新的域名進行替換,單同時為了不丟失來自搜索引擎的流量,舊的域名也需要在一段時間內能夠訪問,並且要實現在用舊的域名訪問網站請求自動轉到新的域名上,這個時候就需要配置新舊域名過渡。在nginx下配置域名過渡的方法非常簡單,有兩種方法可以實現:
要求:訪問www.fjp.com的請求,自動跳轉到www.gxl.com對應的URL路徑下
srver {
server_name www.fjp.com;
rewrite ^/(.*)$ http://www.gxl.com/$1 permanent;
}
server {
listen 80;
server_name www.gxl.com;
這個配置使用了nginx的重定向功能,通過rewrite模塊的permanent參數實現永久重定向的HTTP狀態301.
另外也可以通過判斷nginx核心變量host實現重定向功能:
server {
listen 80;
server_name www.gxl.com www.fjp.com;
if ($host != 'www.gxl.com') {
rewrite ^/(.*)$ http://www.gxl.com/$1 permanent;
}
1.3alias在nginx下的應用
nginx也可以通過alias實現類似於Apache的別名功能,例於下面的一個設置:
location /I {
alias /var/www/html/images/;
}
在這個location配置段中,如果URL請求“/i/logo.gif”,那么nginx將會在服務器上查找“/var/www/html/images/logo.gif”文件,也就是說請求的URL中location后面的部分會被追加到alias指定的目錄后面,而location后面的”/i”路徑將會被自動丟棄,類似的例子還有:
location ~ ^/download/(.*)$ {
alias /home/webdata/www/$1
}
在這個例子中,如何URL請求“/download/ebook.tar.gz”,那么nginx將會在服務器上請求“/home/webdata/www/ebook.tar.gz”文件。
在nginx中,alias命令與root命令所實現的功能有幾分相似,但是也有差別,例如:
location /i {
root /var/www/html/images/;
}
在這個location配置段中,如果URL請求“/i/logo.gif”,那么nginx將會在服務器上查找“/var/www/html/images/i/logo.gif”文件,同理:
location ~ ^/download/(.*)$ {,
root /home/webdata/www/$1
}
如果URL請求的是”/download/ebook.tar.gz”,那么nginx將會在服務器上查找“/home/webdata/www/download/ebook.tar.gz”文件。
從這兩個例子可以看出alias命令和root命令的區別:alias指定的是當前目錄,而root指定的是根目錄,一般情況下,建議在“location /”中通過root命令來配置根目錄,而在其他目錄匹配的位置使用alias命令。
1.4location命令應用實例
location命令在Nginx配置中最常見,也最靈活。通過location命令能完整web系統中的各種特殊功能和配置。下面介紹location命令常見的匹配規則以及規則的優先級,首先看下面四個例子:
location = / {
[ config A ]
}
location / {
[ config B ]
}
location ^~ /images/ {
[ config C ]
}
location ~* \.(gif|jpg|jpeg|swf)$ {
[ config D ]
}
在這個例子中,第一個例子表示只匹配“/”目錄的查詢,優先級最高,其他三個例子中的匹配優先級依次降低。第二個例子匹配以“/”開始的所有查詢,即所有查詢都匹配。第三個例子匹配以“/images/”開始的查詢,不再檢查正則表達式。第四個例子匹配以gif,jpg,jpeg,swf結尾的文件,但匹配優先級低於第三個例子。
nginx功能強大,它幾乎可以實現Apache所有的功能,下面簡單介紹nginx中目錄權限控制,IP訪問控制,文件訪問權限如何實現。
要實現如apache一樣的目錄列表,可添加如下配置:
可以看到,我們現在無法看到根目錄下的這個文件,等我們在主配置文件中添加如下配置端:
location / {
root html;
index index.html index.php;
autoindex on; #開啟目錄瀏覽功能
autoindex_exact_size off; #顯示目錄的詳細大小
autoindex_localtime on; #顯示目錄的詳細時間
}
重啟nginx服務以后,再在瀏覽器里面訪問:
提示:這個意思就是我們可以瀏覽root定義的目錄下面的文件,如果,我們想在整個網站中都開啟這個功能,那么我們需要在server段里面定義網站的根目錄。
要實現IP訪問控制,需要使用ngx_http_access_module模塊,此模塊可以限制某些IP地址的客戶端訪問,看下面一個例子:
location / {
root html;
index index.html index.php;
autoindex on;
autoindex_exact_size off;
autoindex_localtime on;
allow 192.168.147.136;
deny 192.168.147.0/32
deny all;
}
這樣就是只允許136這台主機訪問,拒絕其他所有主機。
要禁止訪問某個目錄,可添加如下設置:
location ~* ^/work/ {
deny all;
}
里面不能設置單個ip或者允許單個IP。
要禁止訪問以TXT或doc為后綴的文件,可添加如下設置:
location ~* \.(txt|doc)$ {
root html;
deny all;
}
通過上面這些功能介紹,可以發現nginx非常靈活,功能也非常強大,是一台高性能的Web服務器。