關於一些nginx的高階擴充套件應用
nginx.conf 配置解釋
-
詳解user www www;
-
定義 Nginx 執行的使用者及組
-
worker_processes 8; #[ debug | info | notice | warn | error | crit ]
-
error_log /data1/logs/nginx_error.log crit; pid
-
/usr/local/webserver/nginx/nginx.pid; #Specifies the value for maximum file descriptors that can be opened by this process.
-
worker_rlimit_nofile 65535;
-
一個 nginx 程式開啟的最多檔案描述符數目,理論值應該是最多開啟檔案數(ulimit
-
-n) nginx 程式數相除,與但是 nginx 分配請求並不是那麼均勻,所以最好與 ulimit -n的值保持一致。
-
# use [ kqueue | rtsig | epoll | /dev/poll | select | poll ];
-
events use epoll; 參考事件模型
-
worker_connections 65535; 每個程式最大連線數(最大連線=連線數 x 程式數) #設定 http 伺服器
-
http include
-
mime.types; 副檔名與檔案型別對映表
-
default_type application/octet-stream; #預設檔案型別
-
#charset gb2312; 預設編碼
-
server_names_hash_bucket_size 128; #伺服器名字的 hash 表大小
-
client_header_buffer_size 32k; 上傳檔案大小限制
-
large_client_header_buffers 4 32k; 設定請求緩
-
client_max_body_size 8m; 設定請求緩
-
sendfile on; #開啟高效檔案傳輸模式
-
tcp_nopush
-
on; 防止網路阻塞
-
tcp_nodelay on; 防止網路阻塞
-
keepalive_timeout 60; 超時時間
-
#FastCGI 是為了改善網站的效能–減少資源佔用,提高訪問速度.有關 fastCGI 的
-
詳細資料請參閱:http://www.fastcgi.com
-
fastcgi_connect_timeout 300;
-
fastcgi_send_timeout 300;
-
fastcgi_read_timeout 300;
-
fastcgi_buffer_size 64k;
-
fastcgi_buffers 4 64k;
-
fastcgi_busy_buffers_size 128k;
-
fastcgi_temp_file_write_size 128k;
-
gzip on;
-
gzip_min_length 1k; #最小壓縮檔案大小
-
gzip_buffers
-
4 16k; #壓縮緩衝區
-
gzip_http_version 1.0;
-
#壓縮版本(預設 1.1,前端為 squid2.5 使用 1.0
-
gzip_comp_level 2; 壓縮等級
-
gzip_types
-
text/plain application/x-javascript text/css application/xml;
-
壓縮型別,預設就已經包含 text/html 所以下面就不用再寫了,當然寫上去的話,也
-
不會有問題,但是會有一個 warn
-
gzip_vary on;
-
#limit_zone crawler $binary_remote_addr 10m; server listen 80;
-
server_name www.opendoc.com.cn
-
index index.html index.htm index.php;
-
root /data0/htdocs/opendoc;
-
location ~ .*.(php|php5)?$ #fastcgi_pass unix:/tmp/php-cgi.sock;
-
fastcgi_pass 127.0.0.1:9000;
-
fastcgi_index index.php;
-
include fcgi.conf; #對圖片快取
-
location ~ .*.(gif|jpg|jpeg|png|bmp|swf)$ expires 30d; #對 JS CSS 快取
-
location ~ .*.(js|css)?$ expires 1h; #日誌設定
-
log_format access `$remote_addr – $remote_user [$time_local] “$request” `
-
`$status $body_bytes_sent “$http_referer” ` `”$http_user_agent” $http_x_forwarded_for`;
-
#日誌的格式
-
access_log /data1/logs/access.log access;
-
}
nginx判斷手機移動裝置使用者的方法
有兩種方法
一種是用語言進行判斷,比如用php的 $_SERVER[`User-Agent`]
-
<?php
-
function is_mobile(){
-
// returns true if one of the specified mobile browsers is detected
-
$regex_match=“/(nokia|iphone|android|motorola|^mot-|softbank|foma|docomo|kddi|up.browser|up.link|”;
-
$regex_match.=“htc|dopod|blazer|netfront|helio|hosin|huawei|novarra|CoolPad|webos|techfaith|palmsource|”;
-
$regex_match.=“blackberry|alcatel|amoi|ktouch|nexian|samsung|^sam-|s[cg]h|^lge|ericsson|philips|sagem|wellcom|bunjalloo|maui|”;
-
$regex_match.=“symbian|smartphone|midp|wap|phone|windows ce|iemobile|^spice|^bird|^zte-|longcos|pantech|gionee|^sie-|portalmmm|”;
-
$regex_match.=“jigs browser|hiptop|^ucweb|^benq|haier|^lct|operas*mobi|opera*mini|320×320|240×320|176×220”;
-
$regex_match.=“)/i”;
-
return isset($_SERVER[`HTTP_X_WAP_PROFILE`]) or isset($_SERVER[`HTTP_PROFILE`]) or preg_match($regex_match, strtolower($_SERVER[`HTTP_USER_AGENT`]));
-
}
-
/*
-
allow the user a way to force either the full or mobile versions of the site – use a GET parameter on requests:
-
include likes to both versions of the site w/ the special force mode parameters, `mobile` and `full`:
-
<ahref=“View`>http://www.php100.com/?mobile”>View Mobile Site</a>
-
<ahref=“View`>http://www.php100.com/?full”>View Full Site</a>
-
Always check for `mobile` or `full` parameters before accounting for any User-Agent conditions:
-
*/
-
if ($_GET[`mobile`]) {
-
$is_mobile = true;
-
}
-
if ($_GET[`full`]) {
-
$is_mobile = false;
-
}
-
if($is_mobile) {
-
//it`s a mobile browser, do something
-
header(“Location: http://wap.baidu.com”);
-
} else {
-
//it`s not a mobile browser, do something else
-
header(“Location: http://www.baidu.com”);
-
// or instead of a redirect, simply build html below
-
}
-
?>
還有一種是用nginx的來判斷
-
if ($http_user_agent ~* (mobile|nokia|iphone|ipad|android|samsung|htc|blackberry)) {
-
// 新增你需要處理的語句,比如rewrite等
-
}
可能一些裝置可能沒有識別的,大家可以看分析日誌,然後把 User-Agent的關鍵字寫到if裡面~
nginx的配置檔案if語句是不支援“並且”和“或者”這樣的多重條件判斷的。在一些情況下,我們又需要if語句進行多個條件的判斷,那麼如何來實現呢?我們可以利用nginx的set語句設定變數的方法來解決。
假設我們需要對 /123/ 路徑進行rewrite,但同時要排除 /123/images/ 路徑不對該路徑進行rewrite,可以採用下面的解決辦法:
-
set $doRewrite “0”;
-
if ($request_uri ~ ^/123/) {
-
set $doRewrite “1”;
-
}
-
if ($request_uri ~ ^/123/images/) {
-
set $doRewrite “0”;
-
}
-
if ($doRewrite = “1”) {
-
// do rewrite
-
}
還有一個例項
這個意思是 判斷真是的ip,然後根據ip做一些操作~ 這裡用的map對映
-
map $http_x_forwarded_for $deny_access {
-
default 0;
-
1.2.3.4 1;
-
1.2.3.5 1;
-
1.2.3.6 1;
-
}
-
if ($deny_access = 1) {
-
return 403;
-
}
防盜鏈的一些個配置
-
location ~* .(gif|png|jpg|bmp|swf|flv)$ {
-
valid_referers none blocked www.ruifengyun.com ruifengyun.com;
-
if ($invalid_referer) {
-
return 403;
-
}
-
}
以上的例子可以實現副檔名為 gif,png,jpg,bmp,swf,flv的url防止被盜鏈。如果你需要其它的url防止被盜鏈,新增相應的字尾即可。
也可以 把return 403 替換成 #rewrite ^/ http://ruifnegyun.com/404.jpg; 這樣可以用另一種方法推廣自己的網站
nginx的限速的規則
配置簡單,只需3行
-
http{
-
……
-
limit_zone one $binary_remote_addr 10m;
-
……
-
server {
-
location / {
-
……
-
limit_conn one 2;
-
limit_rate 40k;
-
}
-
}
-
}
意思是:limit_zone針對每個IP定義一個儲存session狀態的容器。這個示例中定義了一個名叫one的10m大小的容器,這個名字會在後面的limit_conn中使用。limit_conn指定每個訪客只能建立兩條連結,limit_rate限制每條連結的速度不超過40K。所以,以上配置限制使用者訪問此站點總速度上限為80K。
本文轉自 rfyiamcool 51CTO部落格,原文連結:http://blog.51cto.com/rfyiamcool/1167837,如需轉載請自行聯絡原作者
相關文章
- 關於一些nginx的高階擴充套件應用薦Nginx套件
- c# 高階應用 理解擴充套件方法C#套件
- SQL_Postgresql-一些擴充套件和應用SQL套件
- 關於32位oracle擴充套件SGA的一些問題Oracle套件
- 關於Interceptor擴充套件問題套件
- Kotlin委託 & 擴充套件 & 高階函式Kotlin套件函式
- 關於使用擴充套件包的問題。套件
- Sentinel 的一些小擴充套件套件
- VSCode擴充套件應用VSCode套件
- easyui應用(四)--- easyui擴充套件UI套件
- 並查集擴充套件應用並查集套件
- 關於block的ITL和dump的擴充套件BloC套件
- 關於給apache新增PHP擴充套件的方法ApachePHP套件
- 使用高階函式實現類的擴充套件設計函式套件
- ?用Chrome擴充套件管理器, 管理你的擴充套件Chrome套件
- 關於基於 Jdon+Disruptor 的 橫向擴充套件套件
- [譯]擴充套件 Node.js 應用套件Node.js
- 適用於開發者的最佳 Chrome 擴充套件工具Chrome套件
- Ray:用於擴充套件和分發Python和ML應用的框架套件Python框架
- plain framework的實際應用和擴充套件AIFramework套件
- 構建可擴充套件的應用(一) (轉)套件
- 【譯】提高 JavaScript 開發效率的高階 VSCode 擴充套件!JavaScriptVSCode套件
- chrome擴充套件推薦:此刻、今天、最近~一個關於時間管理的擴充套件 – MomentumChrome套件
- chrome擴充套件推薦:此刻、今天、最近~一個關於時間管理的擴充套件 - MomentumChrome套件
- 分享一些好用的 Chrome 擴充套件Chrome套件
- chrome擴充套件應用開發快速科普Chrome套件
- iOS Extension擴充套件開啟宿主應用iOS套件
- 伸縮擴充套件Node.JS應用套件Node.js
- 使用Slice擴充套件伸縮OpenJPA 應用套件
- 基於 Kyma 的企業級雲原生應用的擴充套件案例分享套件
- nginx安裝擴充套件模組報錯Nginx套件
- PHPWAMP安裝Redis擴充套件的方式與相關擴充套件的下載PHPRedis套件
- 6個強大的AngularJS擴充套件應用AngularJS套件
- 關於翻譯包的擴充套件 dimsav/Laravel-translatable套件Laravel
- 高擴充套件性的學習路線套件
- 分享自己寫的關於順豐同城配送的擴充套件包套件
- kotlin 擴充套件(擴充套件函式和擴充套件屬性)Kotlin套件函式
- C# 擴充套件方法 借籤於 Objective-C 擴充套件類.C#套件Object