🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
## 一、概述 传统的基于tomcat的应用,并未做前后端分离,也可以使用nginx,提升架构弹性和安全性; 关于nginx的内容,可以参考: [nginx · FA+Ecloud在线云版产品系通用开发平台综合技术入门手册 · 看云 (kancloud.cn)](https://www.kancloud.cn/fang2099/rayplatform/1480958) ## 二、简单转发方案 ``` ##http段增加的配置 upstream tomcat{ server localhost:8080; } ##server段增加的配置(已经考虑session失效问题) location / { proxy_pass http://tomcat; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $remote_addr; proxy_cookie_path / /; proxy_set_header Cookie $http_cookie; } ``` ##**维护页面功能** 后端tomcat应用需要升级维护的时候,提供一个友好的维护页面功能; 用nginx的502错误来定义: ``` ##server段增加的配置 error_page 500 502 503 504 /maintain.html; location = /maintain.html{ index maintain.html; } ``` 然后将自己写好的maintain.html; 页面存放到/ngix/html目录下面,即可; 然后停止tomcat应用,再访问应用的时候,就会出现维护页面了: ![](https://img.kancloud.cn/0f/40/0f40b8b824808fcb37406b86744cf0cd_1366x736.png) ## cc攻击防护 参考以下攻击防护方案; [安全 · FA+Ecloud在线云版产品系通用开发平台综合技术入门手册 · 看云 (kancloud.cn)](https://www.kancloud.cn/fang2099/rayplatform/2043296) ## 三、动静分离方案 首先、nginx和tomcat各自独立安装好,web应用也按照传统应用部署好; 然后、就是配置nginx的工作了,也就是整合工作; ### 1、JSP页面请求交给Tomcat处理 在nginx.conf中新建一个location,用正则表达式将所有JSP的请求匹配到该location中; ``` location ~ \.jsp$ { proxy_pass http://localhost:8080; 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 10m; client_body_buffer_size 128k; proxy_connect_timeout 90; proxy_send_timeout 90; proxy_read_timeout 90; proxy_buffer_size 8k; proxy_buffers 6 32k; proxy_busy_buffers_size 64k; proxy_temp_file_write_size 64k; } ``` 核心的语句是:proxy_pass http://localhost:8080; 其他的配置: * proxy_set_header Host $host; 后端的Web服务器可以通过X-Forwarded-For获取用户真实IP。 * client_max_body_size 10m; 允许客户端请求的最大单文件字节数。 * client_body_buffer_size 128k; 缓冲区代理缓冲用户端请求的最大字节数。 * proxy_connect_timeout 90; Nginx跟后端服务器连接超时时间。 * proxy_read_timeout 90; 连接成功后,后端服务器响应时间。 * proxy_buffer_size 4k; 设置代理服务器保存用户头信息的缓冲区大小。 * proxy_buffers 6 32k; proxy_buffers缓冲区。 * proxy_busy_buffers_size 64k; 高负荷下缓冲大小。 * proxy_temp_file_write_size 64k; 设定缓存文件夹大小。 此时访问http://localhost/index.jsp,会发现跳转到了Tomcat的页面了,但是目前图片、css等静态文件都是找不到的,所以接下来我们要配置静态文件的路径,完成动静分离; ### 2、动静分离 对于静态文件的请求,我们也新建一个location,将常见图片、css、js等请求匹配到该location中; ``` location ~ \.(html|js|css|gif|jpg|png|bmp|swf)$ { expires 30d; root /usr/lib/tomcat/tomcat/webapps/ROOT; } ``` 配置非常简单,通过root关键字,将匹配到的请求都到tomcat/webapps/ROOT目录下直接查找。而expires 30d则表示使用expires缓存模块,缓存到客户端30天; 配置完后重启Nginx。再输入http://localhost/index.jsp,会发现此时的Tomcat页面已经正常显示了。我们已经完成了JSP请求与静态文件请求的动静分离。 >[danger] 如果配置完仍然发现无法读取静态文件,看看访问http://localhost/tomcat.png时是否显示403 forbidden。如果是的话就是因为权限问题导致的,这里简单的解决办法是把nginx.conf首行的user设为root;