一,nginx反向代理配置
#tomcat
1. upstream tomcat_server{
2. server 127.0.0.1:8080;
3. }
4.
5.
6.
7. erver{
8. listen 80;
9. server_name www.wolfdream.com;
10.
11. location / {
12.
13. proxy_redirect off;
14. proxy_set_header Host $host;
15. proxy_set_header X-Real-IP $remote_addr;
16. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
17. //tomcat_server;
18.
19. }
显然就是用户访问www.wolfdream.com(需要设置本地localhost,将www.wolfdream.com指向nginx所在IP)的时候(或将www.wolfdream.com直接写在nginx所在的IP地址),将请求转到到后台的tomcat服务器,即127.0.0.1:8080,并将请求到的数据转发给client
二,动静态请求相分离
神马意思?图片,JS,HTML等静态的东西去访问一台专门的服务器,而动态的请求去访问另一台服务器。就这么简单,上例子:
1. server {
2. 192.168.154.128:80;
3. server_name image.wolfdream.com;
4. index index.html;
5.
6.
7. //tomcat_server;
8.
9. #charset koi8-r;
10.
11. #access_log logs/host.access.log main;
12.
13.
14.
15. location / {
16. root html;
17. #index index.html index.htm;
18. proxy_redirect off;
19. proxy_set_header Host $host;
20. proxy_set_header X-Real-IP $remote_addr;
21. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
22.
23.
24. }
25.
26.
27.
28. location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
29. {
30.
31. 192.168.154.128 192.168.154.1;
32. if
33. {
34. 403.jpg break;
35. }
36.
37. if
38. 404.jpg last;
39. }
40.
41. expires 30d;
42.
43. }
44. 404 /404.html;
45.
46. static
47. #
48. 500 502 503 504
49. 404.jpg {
50. root html;
51. }
52.
53. }
54.
55. tomcat
56. upstream tomcat_server{
57. server 127.0.0.1:8080;
58. }
59.
60.
61. server{
62. listen 192.168.154.128;
63. server_name www.wolfdream.com;
64.
65. location / {
66.
67.
68. proxy_redirect off;
69. proxy_set_header Host $host;
70. proxy_set_header X-Real-IP $remote_addr;
71. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
72. //tomcat_server;
73.
74. }
75.
76.
77.
78. }
上面这种方式是通过设定不同的域名,可不可以在同一个域名中,通过判断后缀来将动态与静态请求相分离呢?
1. #tomcat
2. upstream tomcat_server{
3. server 127.0.0.1:8080;
4. }
5.
6.
7. server{
8. listen 192.168.154.128;
9. server_name www.wolf.com;
10.
11. location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
12. {
13.
14. root html;
15.
16. }
17.
18.
19. location ~ .*\.(jsp|do)$ {
20.
21. proxy_redirect off;
22. proxy_set_header Host $host;
23. proxy_set_header X-Real-IP $remote_addr;
24. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
25. //tomcat_server;
26.
27. }
OK!同一个域名,根据后缀不同,请求不同的服务,实现动态静态请求相分离。仔细想一想,如果又出现了一种静态的文件,比如*.abc ,那难道又去修改那个配制文件吗?显然不太合理,所以可以考虑将所有的表态文件放在同一个根目录下面,比如/static那么可以将上面的静态页面请求修改一下:
1. location /static
2. {
3.
4. static;
5.
6. }
咦这样是不是就好一些了,而且文件的存放也比较有规范了。
三,nginx缓存应用
nginx具有web缓存服务,proxy_cache,但是有一个问题就是,proxy_cache不能清除指定的URL缓存,只能设置URL过期时间,但是有问题,有人就会很快解决问题,nginx第三方模块ngx_cache_purge能清除指定URL。
nginx安装时需要将ngx_cache_purege加载进去。
1. ./configure --user=www --group=www --add-module=/root/dxm/nginx/ngx_cache_purge-1.2
其中,/root/dxm/nginx/ngx_cache_purge-1.2为ngx_cache_purge解压路径(附件中提供ngx_cache_purge tar包下载)
现在来一段实例,实现图片缓存:
话说proxy_tem_path,与proxy_cache_path必须在同一个分区之下!
1. proxy_temp_path /usr/local/nginx/proxy_temp;
2. proxy_cache_path /usr/local/nginx/proxy_cache_path levels=1:2
1. upstream tomcat_server{
2. 127.0.0.1:8080;
3. }
4.
5.
6. server{
7. 192.168.154.128;
8. server_name www.wolf.com;
9.
10. location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
11. {
12.
13. proxy_cache cache_one;
14. proxy_cache_methods GET HEAD POST;
15. 1;
16. 200 302
17. 404
18. proxy_cache_valid any 1m;
19. "$host:$server_port$uri$is_args$args";
20.
21. proxy_redirect off;
22. proxy_set_header Host $host;
23. proxy_set_header X-Real-IP $remote_addr;
24. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
25. //tomcat_server;
26.
27.
28. }
29.
30.
31. location ~ .*\.(jsp)$ {
32.
33. proxy_redirect off;
34. proxy_set_header Host $host;
35. proxy_set_header X-Real-IP $remote_addr;
36. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
37. //tomcat_server;
38.
39. }
40.
41.
42. location ~ /purge(/.*)
43. {
44. 192.168.154.128;
45. 192.168.154.1;
46. deny all;
47. 1$is_args$args;
48. }
恩,静态页面缓存,动态请求不缓存!
大家看一下最后一段的那个purege配置,很显然,表示哪些IP可以手动清除指定的URL
比如,www.wolfdraem.cn/1.jpg可以访问到我的图片,那么用www.wolfdream.cn/purge/1.jpg 就可以清除图片缓存了。