代理服务器后面有多个web服务器
nginx负载均衡,_第1张图片
upstream 模块
dig 命令 域名解析
nginx负载均衡,_第2张图片
编辑新配置文件
ip_hash 同一个用户保持在一个机器上
nginx负载均衡,_第3张图片
不支持去代理https
ssl 原理
nginx负载均衡,_第4张图片
https 是加密的传输
每次传输都是随机的
生成SSL密钥对
nginx负载均衡,_第5张图片
生成密钥
nginx负载均衡,_第6张图片
转换key 去掉密钥密码
-in 指定密钥 -out 指定输出
nginx负载均衡,
生成请求文件 名字可以自己定义
nginx负载均衡,_第7张图片
生成公钥文件 -days 证书日期
nginx负载均衡,
配置nginx ssl
nginx负载均衡,_第8张图片
编辑新配置文件 监听端口443
nginx负载均衡,_第9张图片
创建root 目录
nginx负载均衡,
检测语法 报错
nginx负载均衡,
重新编译 需要ssl_module
nginx负载均衡,_第10张图片
加上ssl_module &&make&& make install
nginx负载均衡,
重新检测语法没有报错
nginx负载均衡,_第11张图片
重新启动服务 查看端口多了一个443
nginx负载均衡,_第12张图片
在root 目录下创建文件
nginx负载均衡,
证书被标记为不可信任
nginx负载均衡,_第13张图片
提示访问不安全
nginx负载均衡,_第14张图片
沃通电子认证买证书

场景:1台nginx去代理4台apache
需求:根据不同的请求uri 代理到不同的apache

nginx的配置文件为:

  1. upstream aa.com {
  2. server 192.168.0.121;
  3. server 192.168.0.122;
  4. }
  5. upstream bb.com {
  6. server 192.168.0.123;
  7. server 192.168.0.124;
  8. }
  9. server {
  10. listen 80;
  11. server_name www.abc.com;
  12. location ~ aa.php
  13. {
  14. proxy_pass http://aa.com/;
  15. proxy_set_header Host $host;
  16. proxy_set_header X-Real-IP $remote_addr;
  17. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  18. }
  19. location ~ bb.php
  20. {
  21. proxy_pass http://bb.com/;
  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. }
  26. }

nginx代理--根据访问的目录来区分后端的web
我的需求: 当请求的目录是 /aaa/ 则把请求发送到机器a,当请求的目录为/bbb/则把请求发送到机器b,除了目录/aaa/与目录/bbb/外,其他的请求发送到机器b

配置文件内容为:

  1. upstream aaa.com
  2. {
  3. server 192.168.111.6;
  4. }
  5. upstream bbb.com
  6. {
  7. server 192.168.111.20;
  8. }
  9. server {
  10. listen 80;
  11. server_name li.com;
  12. location /aaa/
  13. {
  14. proxy_pass http://aaa.com/aaa/;
  15. proxy_set_header Host $host;
  16. proxy_set_header X-Real-IP $remote_addr;
  17. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  18. }
  19. location /bbb/
  20. {
  21. proxy_pass http://bbb.com/bbb/;
  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. }
  26. location /
  27. {
  28. proxy_pass http://bbb.com/;
  29. proxy_set_header Host $host;
  30. proxy_set_header X-Real-IP $remote_addr;
  31. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  32. }
  33. }
    说明:
    1 以上配置文件中的 aaa.com 以及 bbb.com 都是自定义的,随便写。
    2 upstream 中的server 可以写多个,例如

upstream aaa.com
{
server 192.168.111.6;
server 192.168.111.4;
server 192.168.111.5;
}

3 proxy_pass http://aaa.com/aaa/ 这里必须要加这个目录,不然就访问到根目录了。
4 实际上,上述配置文件中, localtion /bbb/ 部分是可以省略掉的,因为后边的 location / 已经包含了/bbb/,所以即使我们不去定义 localtion /bbb/ 也是会访问到 bbb.com 的。
nginx 代理多台机器 长连接(会话保持)解决问题
网站使用程序 discuzx3 访问都正常,只有用户登陆存在异常,具体的情况是这样的:
用户登陆后,会马上显示未登陆,然后刷新一下或者多下又变成了登陆中。
这个问题很显然是由于session导致,后台有多个web机器,当用户登陆后,会把登陆态session保存到当前web,但是再次发送请求时则会到另一台机器,所以原来的session信息找不到了。解决这个问题有两个思路:

  1. 可以把session时时同步到另外的机器。
  2. 可以让前端的调度器保持长连接,也就是说某个用户的请求在某一时间段内始终抓发到固定的一台机器上。
    这两种方式,第二种更容易实现。
    使用的是nginx的代理,其中nginx有一种算法支持长连接,具体配置是这样的:

    1. upstream test {
    2. ip_hash;
    3. server 192.168.109.5;
    4. server 192.168.109.3;
    5. }
      关键代码: ip_hash
      这样,nginx会把用户的请求一直转发到后端的某台机器

    http://blog.sina.com.cn/s/blog_72995dcc01016msi.html