[关闭]
@kevinZheng 2015-01-10T08:47:00.000000Z 字数 2751 阅读 2916

公司cms网站 nginx 反向代理负载均衡配置测试记录

cms网站 nginx 负载均衡 反向代理


经过两天时间的配置和测试原计划的利用nginx实现cms的反向代理和负载均衡基本成功了,现将过程记录如下:

整体思路

利用nginx的反向代理和负载均衡功能加上cms程序文件共享来实现

环境准备

配置方面

数据库

JC_SITE 表 修改 DOMAIN 字段为 tycms.com记下待会会用到
修改DOMAIN_ALIAS192.168.5.15,192.168.5.250 跟主机地址一致

cms

修改ROOT/WEB-INF目录下servicesServlet-servlet.xml中allowVisitIP属性中的值增加一个测试地址
比如<value>192.168.5.250</value>

tomcat

两台主机上各自配置tomcat可运行环境然后清空webapps目录下的内容
通过conf目录下server.xml中Host节点内配置Context 的方式来指定共享的cms程序目录例如:

<Context docBase="/home/ruizhao/公共的/ROOT" path="/" reloadable="false" workDir=""/>
如果不是两台主机而是一台机器多个tomcat应用测试的话记得修改server.xml中端口配置防止冲突
两台主机分别启动tomcat测试能不能通过各自http://ip:port 来访问,正常访问之后继续配置nginx

nginx操作

ubuntu下nginx常用操作管理:

nginx配置

网上的一般教程都是直接修改nginx.conf 个人觉得这么做是不合适的
以linux 下的配置为例
/etc/nginx/nginx.conf 中http 节点中有这样的内容
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;

说明网站的负载和代理都应该在单独配置然后被引入到主(默认)配置中来
以下为/etc/nginx/sites-enabled/default内容

  1. ##缓存配置
  2. proxy_cache_path /tmp levels=1:2 keys_zone=cache_one:200m inactive=1d max_size=1g;
  3. ##两台主机上做负载,负载名称跟cms数据中配置的域名要一致
  4. upstream tycms.com {
  5. ##具体负载的地址和端口
  6. server 192.168.5.15:18081;
  7. server 192.168.5.250:18080;
  8. ip_hash;##负载分配方式为ip哈希也就是相同ip每次访问相同的负载,方便处理session的问题
  9. }
  10. server {
  11. ##反向代理服务指定端口
  12. listen 80 ;
  13. root /usr/share/nginx/html;
  14. index index.html index.htm;
  15. ##反向代理的域名 ip
  16. server_name 192.168.5.250;
  17. ##代理规则支持正则表达式
  18. ###根目录访问最多直接匹配效率更高
  19. location =/ {
  20. root /;
  21. index index.jhtml;
  22. proxy_pass http://tycms.com;##此处是负载配置的名称,没有负载可以直接写代理的域名端口
  23. ##重定向配置
  24. proxy_redirect http://tycms.com http://$host:$server_port;
  25. ##访问ip记录
  26. proxy_set_header X-Real-IP $remote_addr;
  27. ##缓存配置
  28. proxy_cache cache_one;
  29. proxy_cache_valid 200 302 1h;
  30. proxy_cache_valid 301 1d;
  31. proxy_cache_valid any 1m;
  32. }
  33. ##网站资源、插件、后台登陆、接口服务
  34. location ~ ^/(r|u|res|thirdparty|cmsadmin|services)/ {
  35. root /;
  36. index index.jhtml;
  37. proxy_pass http://tycms.com;
  38. proxy_redirect http://tycms.com http://$host:$server_port;
  39. proxy_set_header X-Real-IP $remote_addr;
  40. }
  41. ##后缀匹配
  42. location ~ \.(jhtml|do|svl|jspx) {
  43. root /;
  44. index index.jhtml;
  45. proxy_pass http://tycms.com;
  46. proxy_redirect http://tycms.com http://$host:$server_port;
  47. proxy_set_header X-Real-IP $remote_addr;
  48. }
  49. ##状态监控
  50. location /status {
  51. stub_status on;
  52. access_log off;
  53. }
  54. ##默认匹配
  55. location /{
  56. root /;
  57. index index.jhtml;
  58. proxy_pass http://tycms.com;
  59. proxy_redirect http://tycms.com http://$host:$server_port;
  60. proxy_set_header X-Real-IP $remote_addr;
  61. # First attempt to serve request as file, then
  62. # as directory, then fall back to displaying a 404.
  63. try_files $uri $uri/ =404;
  64. # Uncomment to enable naxsi on this location
  65. # include /etc/nginx/naxsi.rules
  66. }

总结

配置完成之后可以正常的浏览公告,后台管理公告,接口发布公告。
nginx配置中负载一般情况下默认或者ip_hash就可以,比较困难和麻烦的就是location 的正则表达式 匹配需要反复测试调整,使用和入门应该算是比较简单优化和晋级配置需要更多的动手实验

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注