6. Nginx静态代理与动静分离
把所有静态资源的访问改为访问nginx,而不是访问tomcat,因为nginx更擅长于静态资源的处理,性能更好,效率更高。
所以在实际应用中,我们将静态资源比如图片,css,html,js等交给nginx处理,而不是由tomcat处理;
1.Nginx静态代理如何实现?
答:通过在Nginx的nginx.conf文件进行配置即可实现
方式一:(根据静态资源的格式/基于后缀名进行拦截)
通过在nginx.conf配置文件中添加静态资源的location,比如:
当访问静态资源的时候,从linux服务器/opt/static目录下获取(举例)
location ~ .*\.(js|css|htm|html|gif|jpg|jpeg|png|bmp|swf|ioc|rar|zip|txt|flv|mid|doc|ppt|pdf|xls|mp3|wma)$ {
root /opt/static;
}
以下案列根据.png后缀匹配
案列配置:
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"';
#access_log logs/access.log main;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip on;
upstream www.myweb.com{
ip_hash;
server 127.0.0.1:9100;
server 127.0.0.1:9200;
}
server {
listen 80;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location ~ .*\.(js|css|htm|html|gif|jpg|jpeg|png|bmp|swf|ioc|rar|zip|txt|flv|mid|doc|ppt|pdf|xls|mp3|wma)$ {
root /opt/static;
}
location / {
root html;
index index.html index.htm;
}
location /heal{
root /opt/static/;
index index.html index.htm;
}
location /myweb{
proxy_pass http://www.myweb.com;
}
访问nginx:http://192.168.95.8/myweb/
此时这个资源是由两个部分构成的,页面部分是tomcat返回的,图片是nginx返回的。
效果:
图片位置:
注意:放置静态资源的目录,要注意目录权限,如果权限不足,要给目录赋予权限;
关于location后面的字符串1、~ 表示正则匹配,也就是说后面的内容可以是正则表达式匹配;2、第一个点 . 表示任意字符;3、* 表示一个或多个字符;(.*表示一个或多个任意字符,这里匹配文件名)4、. 是转移字符,是后面这个点的转移字符;5、| 表示或者6、$ 表示结尾整个配置表示以 .后面括号里面的这些后缀结尾的文件都由nginx处理;
方式二:通过在nginx.conf配置文件中配置静态资源所在的目录实现,比如:
(根据静态资源所在的路径目录进行拦截)
location ~ .*/(css|js|img|images) {
root /opt/static;
}
xxx/css xxx/js xxx/img xxx/images
以下案列更具images这个目录匹配:
nginx.conf文件配置:
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"';
#access_log logs/access.log main;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip on;
upstream www.myweb.com{
ip_hash;
server 127.0.0.1:9100;
server 127.0.0.1:9200;
}
server {
listen 80;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
#location ~ .*\.(js|css|htm|html|gif|jpg|jpeg|png|bmp|swf|ioc|rar|zip|txt|flv|mid|doc|ppt|pdf|xls|mp3|wma)$ {
# root /opt/static;
#}
location ~ .*/(css|js|img|images) {
root /opt/static;
}
location / {
root html;
index index.html index.htm;
}
location /heal{
root /opt/static/;
index index.html index.htm;
}
图片位置:
http://192.168.95.8/myweb/images/60x60.png
效果:
我们将静态资源放入/opt/static目录下,然后用户访问时由nginx返回这些静态资源;
动态资源:如jsp有tomcat或者其他服务器完成;
静态资源:如图片,css,js等由nginx服务器完成;
他们各司其职,专注做自己擅长的事情;动静分离充分利用了他们各自的优势,从而达到更高效合理的架构;
2.1 动静分离示列:
Nginx在一台Linux上安装一份,可以启动多个nginx,每个Nginx配置文件不一样即可:
cp nginx.conf nginx81.conf
cp nginx.conf nginx82.conf
2.2 vi nginx81.conf:删除多余的配置,端口设置为81
2.3 vi nginx82.conf:删除多余的配置,端口设置为82
2.4 vi nginx.conf(80端口):
upstream static.myweb.com{
server 127.0.0.1:81;
server 127.0.0.1:82;
}
server {
listen 80;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
#location ~ .*\.(js|css|htm|html|gif|jpg|jpeg|png|bmp|swf|ioc|rar|zip|txt|flv|mid|doc|ppt|pdf|xls|mp3|wma)$ {
# root /opt/static;
#}
location ~ .*/(css|js|img|images) {
proxy_pass http://static.myweb.com;
}
负载均衡Nginx配置:
静态代理Nginx配置:
列续:
(1)依次启动Nginx的配置文件
[root@localhost conf]# /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
[root@localhost conf]# /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx81.conf
[root@localhost conf]# /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx82.conf
(2)查看启动是否ok
ps -aef |grep nginx
(3)图片放置目录
/opt/static/myweb/images/60x60.png
(4)通过Nginx负载均衡访问静态资源
http://192.168.95.8/myweb/images/60x60.png