Nginx 是一個很強大的高性能Web和反向代理應用。原先一直停留在apt install nginx 的階段,直到開始深入了解其模塊等,才發現:nginx牛逼!!nginx除了基礎功能以外還有很多有趣且實用的模塊。因為nginx內置了許多變量(http://nginx.org/en/docs/varindex.html 部分是模塊實現)、邏輯運算、指令,組合起來,就可以實現強大的功能。

安裝nginx

本文所使用的環境

OS: Ubuntu 18.04.1 LTS x86_64 
Host: HVM domU 4.2.amazon 
Kernel: 4.15.0-1021-aws 
Shell: bash 4.4.19 
Terminal: /dev/pts/0 
CPU: Intel Xeon E5-2676 v3 (1) @ 2.400GHz 
GPU: Cirrus Logic GD 5446 

由於俺比較菜,就不再編譯安裝了。我這直接使用apt install nginx進行安裝後,查看nginx的模塊

root@ip-172-26-6-200:/# nginx -V
nginx version: nginx/1.14.0 (Ubuntu)
built with OpenSSL 1.1.1  11 Sep 2018
TLS SNI support enabled
configure arguments: --with-cc-opt='-g -O2 -fdebug-prefix-map=/build/nginx-GkiujU/nginx-1.14.0=. -fstack-protector-strong -Wformat -Werror=format-security -fPIC -Wdate-time -D_FORTIFY_SOURCE=2' --with-ld-opt='-Wl,-Bsymbolic-functions -Wl,-z,relro -Wl,-z,now -fPIC' --prefix=/usr/share/nginx --conf-path=/etc/nginx/nginx.conf --http-log-path=/var/log/nginx/access.log --error-log-path=/var/log/nginx/error.log --lock-path=/var/lock/nginx.lock --pid-path=/run/nginx.pid --modules-path=/usr/lib/nginx/modules --http-client-body-temp-path=/var/lib/nginx/body --http-fastcgi-temp-path=/var/lib/nginx/fastcgi --http-proxy-temp-path=/var/lib/nginx/proxy --http-scgi-temp-path=/var/lib/nginx/scgi --http-uwsgi-temp-path=/var/lib/nginx/uwsgi --with-debug --with-pcre-jit --with-http_ssl_module --with-http_stub_status_module --with-http_realip_module --with-http_auth_request_module --with-http_v2_module --with-http_dav_module --with-http_slice_module --with-threads --with-http_addition_module --with-http_geoip_module=dynamic --with-http_gunzip_module --with-http_gzip_static_module --with-http_image_filter_module=dynamic --with-http_sub_module --with-http_xslt_module=dynamic --with-stream=dynamic --with-stream_ssl_module --with-mail=dynamic --with-mail_ssl_module

ngx_http_geoip_module

  • 模塊安裝文檔:https://docs.nginx.com/nginx/admin-guide/dynamic-modules/geoip/ (上麵我的已經自帶了,就不再重複此步驟)
  • 模塊使用文檔:http://nginx.org/en/docs/http/ngx_http_geoip_module.html

配置:

  1. 下載數據庫這裏有一個巨坑。那就是原先提供IP地址數據庫的公司不再提供此格式的了(黑人問號??),然後我找到了解決方案 。所以可以直接看這篇文章https://stackoverflow.com/questions/54097838/geoip-dat-gz-and-geolitecity-dat-gz-not-longer-available-getting-404-trying-to
  2. 編輯配置文件,指定IP數據庫注意:此處編輯的一定是總的nginx.conf,而不是某個站點的配置。比如我的是在(/etc/nginx/nginx.conf),然後在文件中的 http 參數配置裏加上我們的數據庫。例如:
    http {
         geoip_country /etc/nginx/GeoIP.dat; # 第一部中下載的IP數據庫存放的路徑
            geoip_city /etc/nginx/GeoLiteCity.dat; # 第一部中下載的IP數據庫存放的路徑
    

    此時nginx服務還能正常重啟的話,說明沒有問題。如果nginx打不開請檢查文件路徑和是否配置在http參數下!!

使用:

​ 如果不出意外的話,我們已經可以使用該模塊了。根據上麵配置的geoip_+IP數據庫,nginx多出了幾個可供我們使用的參數。例如我們隻配置了geoip_country的話,就配置成功了以下參數。

$geoip_country_code

two-letter country code, for example, “RU”, “US”.

$geoip_country_code3

three-letter country code, for example, “RUS”, “USA”.

$geoip_country_name

country name, for example, “Russian Federation”, “United States

這點在 模塊使用文檔中 http://nginx.org/en/docs/http/ngx_http_geoip_module.html有清晰說明。

然後就可以在站點的配置文件中使用該字段了。例如以下情況:

location / {
                # First attempt to serve request as file, then
                # as directory, then fall back to displaying a 404.
                try_files $uri $uri/ =404;
                add_header 'Country' "$geoip_country_code";
        }

保存並重啟nginx配置以後訪問就可以看到頭部添加的參數

HTTP/1.1 200 OK
Server: nginx/1.14.0 (Ubuntu)
Content-Type: text/html
Transfer-Encoding: chunked
Connection: keep-alive
Country: CN # 就是這裏啦。
Content-Encoding: gzip

實用場景:

​ 當我們知道了訪客來自哪裏後,就可以針對地區做一些操作。比如隻允許來自中國和美國的訪客訪問:

set $deny 1;
if ($geoip_country_code = "CN"){
    set $deny 0;
}
if ($geoip_country_code = "US"){
    set $deny 0;
}
if ($deny = 1){
    return 403;
}

當然也不僅限於此。這裏有更多想法:https://github.com/search?q=geoip_country_code&type=Code

ngx_http_image_filter_module

  • 模塊安裝文檔https://docs.nginx.com/nginx/admin-guide/dynamic-modules/image-filter/
  • 模塊使用文檔http://nginx.org/en/docs/http/ngx_http_image_filter_module.html

配置:

​ 好像沒啥好配置的??啟用了該模塊就可以直接使用了。

使用:

​ 有以下參數可供我們選擇

image_filter off; 默認是on狀態,使用這個參數來關閉。
image_filter test;
image_filter size; 
image_filter rotate 90 | 180 | 270;
image_filter resize width height;
image_filter crop width height;

​ 所以我實際使用是這樣:

	location /img/ {
	# 對訪問url 以 /img/ 開頭的URL做下麵操作
		set $imgsize 5000;
		# 設置一個默認的大小,為了保持不給定大小參數時候可用。
		if ($arg_w != ''){
			set $imgsize $arg_w;
			# 如果url中有w參數,則取該參數的值
		}
		image_filter resize $imgsize -;
		# 設置返回的大小,width 來自我們的url中的 w 參數。
	}
	# 此時我們訪問 /img/avatar.jpg?w=512 就可以看到圖片的寬度變成了512。由於我們給了一個5000的默認值,所以沒有w參數的情況下也不會影響訪問。

ngx_http_limit_conn_module

  • 模塊使用文檔http://nginx.org/en/docs/http/ngx_http_limit_conn_module.html

配置:

​ 好像沒啥好配置的??啟用了該模塊就可以直接使用了。

使用:

​ 該模塊可以通過對鏈接數限製從而實現對訪客的訪問進行限製。

​ 比如這樣:(可以放到單虛擬主機的配置文件裏,也可以放到具體location下)

limit_conn perserver 300; # 每秒允許有300個連接
limit_conn perip 25;# 每秒允許單IP有25個連接
limit_rate 512k;# 限速每秒512K

當然,可以根據自己需要調整上麵的數值。如果達到了限製的話,會返回503頁麵。可以通過查詢日誌的方式來看自己站點的錯誤數量,如果正常訪問時候錯誤很多的話,那證明需要提高閥值了。

 

相關說明:

1、VIP會員無限製任意下載,免積分。立即前往開通>>

2、下載積分可通過日常 簽到綁定郵箱 以及 積分兌換 等途徑獲得!

3、本站資源大多存儲在雲盤,如出現鏈接失效請評論反饋,如有密碼,均為:www.ipipn.com。

4、所有站內資源僅供學習交流使用。未經原版權作者許可,禁止用於任何商業環境,否則後果自負。為尊重作者版權,請購買正版作品。

5、站內資源來源於網絡公開發表文件或網友分享,如侵犯您的權益,請聯係管理員處理。

6、本站提供的源碼、模板、軟件工具等其他資源,都不包含技術服務,請大家諒解!

7、源碼、模板等資源會隨著技術、壞境的升級而存在部分問題,還請慎重選擇。

PS.源碼均收集自網絡,如有侵犯閣下權益,請發信件至: admin@ipipn.com .


源站網 » Nginx實用模塊

發表評論

讚助本站發展 維持服務器消耗

全站源碼免費下載 立刻讚助