動靜分離
Nginx動靜分離是讓動態網站里的動態網頁根據一定規則把不變的資源和經常變的資源區分開來,動靜資源做好了拆分以后,我們就可以根據靜態資源的特點將其做緩存操作,這就是網站靜態化處理的核心思路。
upstream apptest{ server localhost:8080; server localhost:8090; } server { listen 80; server_name localhost; location / { root /usr/local/nginx/html; index index.html index.htm; } # 所有靜態請求都由nginx處理,存放目錄為html location ~.(gif|jpg|jpeg|png|bmp|swf|css|js)$ { root /usr/local/nginx/html; } # 所有動態請求都轉發給tomcat處理 location ~.(jsp|do)$ { proxy_pass http://apptest; proxy_redirect off; proxy_set_header HOST $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; client_max_body_size 50m; client_body_buffer_size 512k; proxy_connect_timeout 90; proxy_send_timeout 90; proxy_read_timeout 90; proxy_buffer_size 10k; proxy_buffers 4 64k; proxy_busy_buffers_size 128k; proxy_temp_file_write_size 128k; } error_page 500 502 503 504 /50x.html; location = /50x.html { } }
這樣我們就可以吧HTML以及圖片和css以及js放到wwwroot目錄下,而tomcat只負責處理jsp和請求,例如當我們后綴為gif的時候,Nginx默認會從wwwroot獲取到當前請求的動態圖文件返回,當然這里的靜態文件跟Nginx是同一台服務器,我們也可以在另外一台服務器,然后通過反向代理和負載均衡配置過去就好了,只要搞清楚了最基本的流程,很多配置就很簡單了,另外localtion后面其實是一個正則表達式,所以非常靈活.
配置實例:

upstream tomcat7{ server 192.168.100.105:8080; } server { listen 80; server_name www.saneri.com; location / { root /usr/local/nginx/html; index index.html index.htm; } location ~.(gif|jpg|jpeg|png|bmp|swf|css|js)$ { root /usr/local/nginx/html; } location ~.(jsp|do)$ { proxy_pass http://tomcat7; proxy_redirect off; proxy_set_header HOST $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; client_max_body_size 50m; client_body_buffer_size 512k; proxy_connect_timeout 90; proxy_send_timeout 90; proxy_read_timeout 90; proxy_buffer_size 10k; proxy_buffers 4 64k; proxy_busy_buffers_size 128k; proxy_temp_file_write_size 128k; } location /nginx_status { stub_status on; access_log off; allow 127.0.0.1; deny all; } error_page 404 /404.html; location = /40x.html { } error_page 500 502 503 504 /50x.html; location = /50x.html { } } log_format access '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for" $request_time'; access_log /usr/local/nginx/logs/access.log access;