http://www.2cto.com/os/201301/185533.html Nginx+Tomcat实现反向代理与动静分离


Nginx+Tomcat实现反向代理、页面缓存、动静分离nginx.conf示例:

user  apache apache;
worker_processes  8;
error_log /usr/local/nginx/logs/error.log crit;
pid        /usr/local/nginx/logs/nginx.pid;
worker_rlimit_nofile  65535;
events {
    use epoll;
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    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"';
   server_names_hash_bucket_size 128;
   client_header_buffer_size 32k;
   large_client_header_buffers 4 128k;
   client_max_body_size 8m;
client_body_buffer_size 32k;
   proxy_ignore_client_abort on;
   proxy_connect_timeout 5;
   proxy_read_timeout 60;
  proxy_send_timeout 5;
 proxy_buffer_size 32k;
proxy_buffers  4 64k;
    proxy_busy_buffers_size 128k;
    proxy_temp_file_write_size 1024m;
    open_file_cache max=102400 inactive=20s;
    open_file_cache_valid 30s;
open_file_cache_min_uses 1;
    server_tokens off;
sendfile        on;
    tcp_nopush     on;
    keepalive_timeout  60;
    tcp_nodelay on;
#gzip  on;
gzip  on;
    gzip_min_length 1k;
gzip_buffers 4 16k;
gzip_http_version 1.1;
 gzip_comp_level 2;
gzip_types   text/plain application/x-javascript text/css application/xml;
    gzip_vary on;
   #proxy_cache
    proxy_cache_path  /usr/local/nginx/conf/cache levels=1:2 keys_zone=cache_one:200m inactive=1d max_size=30g;
server {
        listen       8000;
        server_name  localhost;
       location / {
            proxy_pass    http://hk.lotto888.mn:8000;
#add_header  Nginx-Cache "$upstream_cache_status";
#proxy_set_header http://hk.lotto888.mn:8000;
            #proxy_redirect default ;
        }
       location ~.*\.(gif|jpg|jpeg|png|bmp|sqf|js|css)$
         {
             proxy_cache cache_one;
             proxy_cache_valid 200 304 12h;
             proxy_cache_valid any 1m;
             proxy_set_header Host $host;
             proxy_set_header X-Real-IP $remote_addr;
             proxy_set_header Accept-Encoding "none";
             proxy_ignore_headers "Cache-Control" "Expires";
             add_header  Nginx-Cache "$upstream_cache_status";
             if ( !-e  $request_filename )
                {
                proxy_pass  http://hk.lotto888.mn:8000;
                 }
             expires 1h;
        }
  location ~.*\.(php|jsp|cgi)?$
   {
     proxy_set_header Host $host;
     proxy_set_header X-Forwarded-For $remote_addr;
     proxy_pass http://hk.lotto888.mn:8000;
    }
       location ~ .*\.(js|css)
            {
                expires  1h;
             }
 location ~/purge(/.*)
       {
       allow   127.0.0.1;
       allow  192.168.1.0/24;
       deny    all;
       proxy_cache_purge cache_one $host$1$is_args$args;
      }
    }
access_log /usr/local/nginx/logs/wenquan.log main;
}

注:location ~ .*\.(gif|jpg|jpeg|png|bmp|sqf|js)$ 不加css访问192.168.1.123:8000页面会显示不全


nginx编译参数

./configure --prefix=/usr --sbin-path=/usr/sbin/nginx --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx/nginx.pid --lock-path=/var/lock/nginx.lock --user=nginx --group=nginx --with-http_ssl_module --with-http_flv_module --with-http_stub_status_module --with-http_gzip_static_module --http-client-body-temp-path=/var/tmp/nginx/client --http-proxy-temp-path=/var/tmp/nginx/proxy --http-fastcgi-temp-path=/var/tmp/nginx/fcgi --http-uwsgi-temp-path=/var/tmp/nginx/uwsgi --http-scgi-temp-path=/var/tmp/nginx/scgi --with-pcre=/usr/local/pcre/ --add-module=/soft/ngx_cache_purge-2.1


查看缓存命中率

cat access.log |grep "HIT"|wc -l

awk '{if($NF=="\"-\"\"HIT\"")hit++}END{printf "%.2f%",hit/NR}' access.log


——————————————————


location基本语法


location [=|~|~*|^~] /uri/ { … }

= 严格匹配。如果这个查询匹配,那么将停止搜索并立即处理此请求。

~ 为区分大小写匹配

~* 为不区分大小写匹配

!~和!~*分别为区分大小写不匹配及不区分大小写不匹配

^~ 如果把这个前缀用于一个常规字符串,那么告诉nginx 如果路径匹配那么不测试正则表达式。


例:

location = / { # 只匹配 / 查询。 location / { # 匹配任何查询,因为所有请求都已 / 开头。但正则表达式规则和长的块规则将被优先和查询匹配。

location ^~ /p_w_picpaths/ { # 匹配任何已 /p_w_picpaths/ 开头的任何查询并且停止搜索。任何正则表达式将不会被测试。

location ~* \.(gif|jpg|jpeg)$ { # 匹配任何已 gif、jpg 或 jpeg 结尾的请求。


* -f和!-f用来判断是否存在文件

* -d和!-d用来判断是否存在目录

* -e和!-e用来判断是否存在文件或目录

* -x和!-x用来判断文件是否可执行


location可以使用前缀字符串或者正则表达式定义路径。使用正则表达式需要在路径开始添加“~*”前缀 (不区分大小写),或者“~”前缀(区分大小写)。为了根据请求URI查找路径,nginx先检查前缀字符串定义的路径 (前缀路径),在这些路径中找到能最精确匹配请求URI的路径。然后nginx按在配置文件中的出现顺序检查正则表达式路径, 匹配上某个路径后即停止匹配并使用该路径的配置,否则使用最大前缀匹配的路径的配置

让我们用一个例子解释上面的说法:


location = / {

   [ configuration A ]

}


location / {

   [ configuration B ]

}


location /documents/ {

   [ configuration C ]

}


location ^~ /p_w_picpaths/ {

   [ configuration D ]

}


location ~* \.(gif|jpg|jpeg)$ {

   [ configuration E ]

}

请求“/”匹配配置A, 请求“/index.html”匹配配置B, 请求“/documents/document.html”匹配配置C, 请求“/p_w_picpaths/1.gif”匹配配置D, 请求“/documents/1.jpg”匹配配置E。