1、原理
Nginx的静态处理能力很强,但是动态处理能力不足,因此,在企业中常用动静分离技术。动静分离技术其实是采用代理的方式,在server{}段中加入带正则匹配的location来指定匹配项针对php、jsp的动静分离:静态页面交给Nginx处理,动态页面交给PHP-FPM模块或Apache、tomcat、IIS处理。在Nginx的配置中,是通过location配置段配合正则匹配实现静态与动态页面的不同处理方式。
Nginx是一种轻量级,高性能,多进程的Web服务器,非常适合作为静态资源的服务器使用,而动态的访问操作可以使用稳定的Apache、Tomcat及IIS等来实现,这里就以Nginx作为代理服务器的同时,也使用其作为静态资源的服务器,而动态的访问服务器就以tomcat为例说明。
说明:
1、代理服务器和静态服务器可以为一台服务器,也可以独立部署,这里代理服务器和静态服务器为一台服务器。
2、静态服务器中,存放的资源主要是源代码文件、图片、属性、样式以及其它所有非动态的资源文件。
3、调度规则,即为代理服务器,这里是Nginx的服务器调度规则。
4、动态服务器,其种类比较繁多,可以是Apache、Tomcat、IIS以及其它Web服务器,它们一般分别隶属于一台服务器。
1.1、修改nginx配置文件
vim /usr/local/nginx/conf/nginx.conf
user www www;
worker_processes 4;
worker_cpu_affinity 0001 0010 0100 1000;
error_log logs/error.log;
worker_rlimit_nofile 10240;
pid logs/nginx.pid;
events {
use epoll;
worker_connections 65535;
}
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"';
access_log logs/access.log main;
server_tokens off;
sendfile on;
tcp_nopush on;
keepalive_timeout 65;
gzip on;
gzip_comp_level 6;
gzip_http_version 1.1;
gzip_proxied any;
gzip_min_length 1k;
gzip_buffers 16 8k;
gzip_types text/plain text/css text/javascript application/json application/javascript application/x-javascript application/xml;
gzip_vary on;
client_max_body_size 10m;
client_body_buffer_size 128k;
proxy_connect_timeout 75;
proxy_send_timeout 75;
proxy_read_timeout 75;
proxy_buffer_size 4k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
proxy_buffering off;
proxy_temp_path /usr/local/nginx/proxy_temp;
proxy_cache_path /usr/local/nginx/proxy_cache levels=1:2 keys_zone=my-cache:100m max_size=1000m inactive=600m max_size=2g;
#配置负载均衡
upstream tomcat_dynamic_pools { # tomcat动态服务器集群
server 192.168.1.3:8080 weight=1 max_fails=2 fail_timeout=10s;
}
upstream static_pools { #静态服务器集群
server 192.168.1.5 weight=1 max_fails=2 fail_timeout=10s;
}
server{
listen 80;
server_name www.nihao.com;
location ~ .*\.(gif|jpg|jpeg|png|bmp|rar|zip|txt|flv|mid|doc|ppt|xls|mp3|wma|html|htm|css|js|ico|swf|pdf)$ {
#所有静态文件直接读取硬盘内容:读取的静态资源存放位置
root html ;
#资源是否进行缓存与缓存时间
expires 30d; #缓存30天
}
}
#配置nginx动静分离
server {
listen 80;
server_name www.nihao.com;
charset utf-8;
location ~ .*\.jsp$ {
proxy_pass http://tomcat_dynamic_pools;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_ignore_headers Set-Cookie;
proxy_hide_header Set-Cookie;
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
}
location / {
proxy_pass http://static_pools;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
proxy_cache my-cache;
add_header Nginx-Cache $upstream_cache_status;
proxy_cache_valid 200 304 301 302 8h;
proxy_cache_valid 404 1m;
proxy_cache_valid any 1d;
#proxy_cache_key $host$uri$is_args$args;
expires 30d;
}
}
}
1.2、重载nginx
nginx -s reload
1.3、测试
访问静态网页
访问动态网页