Home | 簡體中文 | 繁體中文 | 雜文 | 知乎專欄 | Github | OSChina 博客 | 雲社區 | 雲棲社區 | Facebook | Linkedin | 視頻教程 | 打賞(Donations) | About
知乎專欄多維度架構 微信號 netkiller-ebook | QQ群:128659835 請註明“讀者”

45.4. Nginx module

45.4.1. stub_status

		
location /nginx_status {
	stub_status on;
	access_log  off;
	allow 127.0.0.1;
	deny all;
}
		
		

php-fpm 狀態

		
    location ~ ^/(status|ping)$ {
        access_log off;
        allow 202.82.21.12;
        deny all;
        fastcgi_pass 127.0.0.1:9000;
		fastcgi_param SCRIPT_FILENAME $fastcgi_script_name;
        include fastcgi_params;
    }
    	
		

45.4.2. sub_filter 頁面中查找和替換

		
location / {
    sub_filter '<a href="http://127.0.0.1:8080/'  '<a href="https://$host/';
    sub_filter '<img src="http://127.0.0.1:8080/' '<img src="https://$host/';
    sub_filter_once on;
}
		
		

替換掉proxy_pass頁面中的內容

		
    location ~ ^/live800 {
        proxy_pass           http://218.23.24.53;
        rewrite              ^/live800/(.*)  /$1 break;
        proxy_set_header    Accept-Encoding "";
        proxy_set_header    X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header    Host www.abc.com;

        sub_filter_types text/html text/css text/xml text/css text/javascript;
        sub_filter 'www.abc.com'  '$host';
        sub_filter_once off;
    }
    	
		

45.4.3. auth_basic

		
cd /usr/local/nginx/conf
server {
	listen 80;
	server_name www.example.com;
	root /var/www/htdocs;
	index index.html;

	location / {
		try_files $uri $uri/ /index.html;
		auth_basic            "Administrator’s Area";
        auth_basic_user_file  conf/htpasswd;
	}
}
		
		

45.4.3.1. 使用 htpasswd 生幾個密碼檔案

生成密碼檔案

		
$ sudo apt-get install apache2-utils

htpasswd -c -d htpasswd user_name
		
			
[提示]提示

必須使用 -d Force CRYPT encryption of the password. 選項,

45.4.3.2. 使用 openssl 生成密碼

			
[root@netkiller ~]# openssl passwd
Password: 
Verifying - Password: 
9/cEBEuF8T/xQ
			
			

45.4.4. valid_referers

例 45.4. Example: valid_referers

		
location /photos/ {
  valid_referers none blocked www.mydomain.com mydomain.com;

  if ($invalid_referer) {
    return   403;
  }
}
			
			
		
location ~* \.(gif|jpg|jpeg|png|bmp|txt|zip|jar|swf)$ {
	valid_referers none blocked *.mydomain.com;
	if ($invalid_referer) {
		rewrite ^/  http://www.mydomain.com/default.gif;
		#return 403;
	}

}

location /images/ {
	alias /www/images/;
	valid_referers none blocked *.mydomain.com;
	if ($invalid_referer) {
		rewrite ^/  http://www.mydomain.com/default.gif;
	}
}
			
			

45.4.5. ngx_http_flv_module

		
location ~ \.flv$ {
    flv;
}
		
		

45.4.6. ngx_http_mp4_module

		
location /video/ {
    mp4;
    mp4_buffer_size       1m;
    mp4_max_buffer_size   5m;
    mp4_limit_rate        on;
    mp4_limit_rate_after  30s;
}
		
		

45.4.7. limit_zone

		
limit_zone   one  $binary_remote_addr  10m;

server {
	location /download/ {
	limit_conn   one  1;
}
		
		

45.4.8. image_filter

		
image_filter 配置項:
image_filter off;    在所在location關閉模組處理。
image_filter test;  確保應答是JPEG,GIF或PNG格式的圖像。否則錯誤 415 (Unsupported Media Type) 將被返回。
image_filter size;  以JSON格式返回圖像信息。
image_filter rotate 90 | 180 | 270;  將圖像逆時針旋轉指定角度。 參數的值可以包含變數。 可以單獨使用,或與 resize 和 crop 變換同時使用.
image_filter resize width height;  按比例縮小圖像至指定大小。 如果想只指定其中一維,另一維可以指定為: “-”。 如果有錯誤發生,伺服器會返回 415 (Unsupported Media Type). 參數的值可以包含變數。 當與 rotate 參數同時使用時, 旋轉發生在縮放 之後。 
image_filter crop width height;  按比例以圖像的最短邊為準對圖像大小進行縮小,然後裁剪另一邊多出來的部分。 如果想只指定其中一維,另一維可以指定為: “-”。 如果有錯誤發生,伺服器會返回 415 (Unsupported Media Type). 參數的值可以包含變數。 當與 rotate 參數同時使用時, 旋轉發生在裁剪 之前。

image_filter_buffer 配置項:
image_filter_buffer size; 例如 image_filter_buffer 1M; 設置用來讀圖像的緩衝區的最大值。 若圖像超過這個大小,伺服器會返回 415 (Unsupported Media Type).
image_filter_jpeg_quality quality; 例如 image_filter_jpeg_quality 75;設置變換後的JPEG圖像的 質量 。 可配置值: 1 ~ 100 。 更小的值意味着更差的圖像質量以及更少需要傳輸的數據。 推薦的最大值是95. 參數的值可以包含變數。
image_filter_sharpen percent; image_filter_sharpen 0;  增加最終圖像的鋭度。 鋭度百分比可以超過100. 0為關閉鋭化。 參數的值可以包含變數。
image_filter_transparency on|off; image_filter_transparency on;定義當對PNG,或者GIF圖像進行顏色變換時是否需要保留透明度。 損失透明度有可能可以獲得更高的圖像質量。 PNG圖像中的alpha通道的透明度預設會一直被保留。
 		
		
		
		
比如所有的圖片並修改尺寸為 800x600

       location ~* \.(jpg|gif|png)$ {
               image_filter resize 800 600;
       }

匹配images目錄所有圖片並修改尺寸為1920x1080

       location ~* /images/.*\.(jpg|gif|png)$ {
               image_filter resize 1920 1080;
       }


再比如用url來指定

location ~* (.*\.(jpg|gif|png))!(.*)x(.*)$ {
    set $width      $3;
    set $height     $4;
	rewrite "(.*\.(jpg|gif|png))(.*)$" $1;
}

location ~* .*\.(jpg|gif|png)$ {
	image_filter resize $width $height;
}

location ~* /images/(.+)_(d+)x(d+).(jpg|gif|png)$ {            
    set $height $2;
    set $width $3;
    if ($height = "0") {
        rewrite /images/(.+)_(d+)x(d+).(jpg|gif|png)$ /images/$1.$4 last;
    }
    if ($width = "0") {
        rewrite /images/(.+)_(d+)x(d+).(jpg|gif|png)$ /images/$1.$4 last;
    }

    #根據給定的長寬生成縮略圖
    image_filter resize $height $width;
    
    #原圖最大2M,要裁剪的圖片超過2M返回415錯誤,根據你的需求調節參數image_filter_buffer 
    image_filter_buffer 2M;                          
    
    #error_page  415      		/images/404.jpg;
    try_files /images/$1.$4  	/images/404.jpg;	
}

location ~* /images {
    
}
        
location ~* ^/images/resize/([\d\-]+)_([\d\-]+)/(.+) {  
    alias /www/example.com/img.example.com/$3;
    image_filter test;
    image_filter resize $1 $2;
    image_filter_buffer 2M;
    image_filter_jpeg_quality 95;
    image_filter_sharpen 90;
    expires 60d;
}		
		
		

45.4.9. ngx_stream_proxy_module

ngx_stream_proxy_module 用法與 ngx_http_proxy_module 及其相似, 前者用於tcp代理或負載均衡。後者只能用於 http 的代理

注意模組的proxy_pass指令只能在server段使用, 提供域名或ip地址和連接埠轉發,協議可以是tcp,也可以是udp。

		
server {
    listen 127.0.0.1:80;
    proxy_pass 127.0.0.1:8080;
}

server {
    listen 25;
    proxy_connect_timeout 1s;
    proxy_timeout 1m;
    proxy_pass mail.example.com:25;
}

server {
    listen 53 udp;
    proxy_responses 1;
    proxy_timeout 20s;
    proxy_pass dns.example.com:53;
}

server {
    listen [::1]:8000;
    proxy_pass unix:/tmp/stream.socket;
}		
		
		

45.4.10. ngx_http_mirror_module

		
location / {
    mirror /mirror;
    proxy_pass http://backend;
}

location /mirror {
    internal;
    proxy_pass http://test_backend$request_uri;
}
		
		

45.4.11. limit_except

		
    location /api/ {

        limit_except PUT DELETE {
            proxy_pass http://127.0.0.1:9080;
        }
    }		
		
		

45.4.12. geoip_country_code

		
location /google {
    if ( $geoip_country_code ~ (RU|CN) ) {
        proxy_pass http://www.google.hk;
    }
}