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.="jig\s browser|hiptop|^ucweb|^benq|haier|^lct|opera\s*mobi|opera\*mini|320x320|240x320|176x220";
-
$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,如需转载请自行联系原作者