nginx 의 고급 확장 프로그램
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 모 바 일 기기 사용 자 를 판단 하 는 방법
두 가지 방법 이 있어 요.
하 나 는 언어 로 판단 하 는 것 이다. 예 를 들 어 phop 을 사용 하 는 것 이다. $_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 $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 이 도 둑 맞 는 것 을 방지 하려 면 해당 접 두 사 를 추가 하면 됩 니 다.
되다 반환 하 다 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;
}
}
}
limitzone 은 모든 IP 에 대해 session 상 태 를 저장 하 는 용 기 를 정의 합 니 다.이 예제 에 서 는 원 이라는 10m 크기 의 용 기 를 정의 합 니 다. 이 이름 은 뒤의 limit 에 있 습 니 다.conn 에서 사용 합 니 다.limit_conn 은 모든 방문객 에 게 두 개의 링크 만 만 만 들 수 있 도록 지정 합 니 다. limitrate 는 모든 링크 의 속도 가 40K 를 초과 하지 않도록 제한 합 니 다.따라서 상기 설정 은 사용자 가 이 사이트 에 접근 하 는 것 을 제한 합 니 다. 총 속도 상한 선 은 80K 입 니 다.