赞
踩
Nginx 已经在俄罗斯最大的门户网站── Rambler Media(www.rambler.ru)上运行了4年时间,同时俄罗斯超过20%的虚拟主机平台采用Nginx作为反向代理服务器。
在国内,已经有新浪博客、新浪播客、搜狐通行证、网易新闻、网易博客、金山逍遥网、金山爱词霸、校内网、YUPOO相册、豆瓣、迅雷看看等多家网站、频道使用 Nginx 服务器。
官方测试能够支撑5W并发连接,在实际生产中可跑到2~3W并发连接数。
# 在nginx.conf配置文件中,用upstream指令定义一组反向代理/负载均衡后端服务器池
upstream bbs_server_pool {
server 192.168.1.15:80 weight=1 max_fails=2 fail_timeout=30s;
server 192.168.1.16:80 weight=1 max_fails=2 fail_timeout=30s;
server 192.168.1.17:80 weight=1 max_fails=2 fail_timeout=30s;
server 192.168.1.18:80 weight=1 max_fails=2 fail_timeout=30s;
}
server {
listen 80;
server_name bbs.yourdomain.com *.bbs.yourdomain.com;
location /
{
proxy_pass http://bbs_server_pool; #用于指向反向代理的服务器池
proxy_set_header Host $host;
#如果后端的web服务器的程序需要获取用户的IP,请从该Header头获取
proxy_set_header X-Forwarded-For $remote_addr;
}
access_log off;
}

server {
listen 80;
server_name abc.domain.com;
# 正则匹配
location ~ ^/admincp.php
{
proxy_pass http://192.168.1.11;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
}
location /
{
proxy_pass http://php_server_pool;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
}
}

- = 表示精确匹配
- ^~ 开头表示url已某个常规字符串开头,不是正则匹配
- ~ 开头表示区分大小写的正则匹配
- ~* 开头表示不区分大小写的正则匹配
- / 通用匹配,如果没有其他匹配任何请求都会匹配到
(location =) > (location 完整路径) > (location ^~ 路径) > (location ~,~* 正则顺序) > (location 部分起始路径) > (/)
# 设置Web缓存区名称为cache_one,缓存空间大小为2000MB,一天清理一次缓存,单个文件超过5M不缓存。
proxy_cache_path /var/cache/nginx/proxy_cache levels=1:2 kes_zone=cache_one:2000m inactive 1d max_size=5m;
# 注:proxy_temp_path和proxy_cache_path指定的路径必须在同一分区
proxy_temp_path /var/cache/nginx/proxy_cache;
upstream my_server_pool {
server 192.168.1.2:80 weight=1 max_fails=2 fail_timeout=30s;
server 192.168.1.3:80 weight=1 max_fails=2 fail_timeout=30s;
}
server
{
listen 80;
server_name my.domain.com;
location /
{
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_pass http://my_server_pool;
}
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|js|css)$
{
# 对图片、JS、CSS进行缓存,使用Web缓存区cache_one
proxy_cache cache_one;
# 对不同HTTP状态码缓存设置不同的缓存时间
proxy_cache_valid 200 10m;
proxy_cache_valid 304 3m;
proxy_cache_valid 301 302 1h;
proxy_cache_valid any 1m;
# 设置Web缓存的Key值,Nginx根据Key值md5哈希存储缓存,这里根据“域名、URI、客户端请求Header头中的If-Modified-Since信息”组合成Key。
proxy_cache_key $host$request_uri$http_if_modified_since;
# 反向代理,访问后端内容源服务器
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_pass http://my_server_pool;
}
access_log off;
}

Nginx Rewrite规则相关指令有if、rewrite、set、return、break等,其中rewrite是最关键的指令。一个简单的rewrite规则语法如下:
rewrite ^/b/(.*).html /play.php?video=$1 break;
如果加上 if 语句,示例如下:
if (!-f $request_filename)
{
rewrite ^/img/(.*)$ /site/$host/images/$1 last;
}
if ($host ~* ^(.*?)\.domain\.com$)
{
set $var_wupin_city $1;
set $var_wupin '1';
}
if ($host ~* ^qita\.domain\.com$)
{
set $var_wupin '0';
}
if (!-f $document_root/market/$var_wupin_city/index.htm)
{
set $var_wupin '0';
}
if ($var_wupin ~ '1')
{
rewrite ^/wu/$ /market/$var_wupin_city/index.htm last;
}

利用nginx的rewrite的指令,可以实现url的转向,对于rewrtie有四种不同的flag,分别是redirect、permanent、break和last。其中前两种是跳转型的flag,后两种是代理型。跳转型是指有客户端浏览器重新对新地址进行请求,代理型是在WEB服务器内部实现跳转的。
worker_processes auto;
error_log /var/log/nginx_error.log crit;
pid /run/nginx.pid;
#Specifies the value for maximum file descriptors that can be opened by this process.
worker_rlimit_nofile 51200;
events
{
use epoll;
worker_connections 51200;
multi_accept on;
}
http
{
include mime.types;
charset utf-8;
default_type application/octet-stream;
server_name_in_redirect off;
server_names_hash_bucket_size 128;
client_header_buffer_size 32k;
large_client_header_buffers 4 32k;
client_max_body_size 300m;
client_body_timeout 10;
types_hash_max_size 2048;
sendfile on;
tcp_nopush on;
keepalive_timeout 60;
tcp_nodelay on;
proxy_cache_path /var/cache/nginx/proxy_cache levels=1:2 keys_zone=http-cache:500m max_size=10g inactive=60m;
proxy_redirect off;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_connect_timeout 60;
proxy_send_timeout 60;
proxy_read_timeout 60;
proxy_buffer_size 16k;
proxy_buffers 4 64k;
proxy_busy_buffers_size 128k;
proxy_temp_file_write_size 128k;
proxy_temp_path /var/cache/nginx/proxy_cache/tmp;
#use_temp_path off;
gzip on;
gzip_static on;
gzip_min_length 1024;
gzip_buffers 4 16k;
gzip_http_version 1.0;
gzip_comp_level 2;
gzip_types text/plain text/css image/png image/gif image/jpeg application/x-javascript text/xml application/xml application/xml+rss text/javascript image/x-icon;
gzip_vary on;
gzip_proxied expired no-cache no-store private auth;
gzip_disable "MSIE [1-6]\.";
server_tokens off;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" $http_x_forwarded_for $upstream_cache_status '
'"$upstream_http_content_type" $request_time $upstream_response_time $bytes_sent $request_length '
'"$upstream_addr"';
upstream toc {
server 10.0.3.10:9999 weight=1 max_fails=2 fail_timeout=30s;
server 10.0.4.10:9999 weight=1 max_fails=2 fail_timeout=30s;
}
server {
listen 80;
server_name www.domain.com;
access_log /var/log/access.log main;
if ($host != 'www.domain.com'){
rewrite ^/(.*)$ http://www.yingketravel.com/$1 permanent;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/local/nginx/html;
}
location ~* \.(gif|jpg|png|css|js)$ {
if ($request_uri !~ "^/toc-web/") {
rewrite ^/(.*)$ /toc-web/$1 break;
}
proxy_pass http://yingke_web;
proxy_redirect off;
proxy_set_header Host $host;
proxy_cache http-cache;
proxy_cache_valid 200 302 30d;
proxy_cache_valid 301 1d;
proxy_cache_valid any 1m;
expires 1d;
}
location / {
if ($request_uri !~ "^/toc-web/") {
rewrite ^/(.*)$ /toc-web/$1 break;
}
proxy_pass http://yingke_web;
proxy_set_header Host $host;
}
}
}

Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。