zhouer 发表于 2018-11-12 09:53:22

nginx负载均衡,

  代理服务器后面有多个web服务器

  upstream 模块
  dig 命令   域名解析

  编辑新配置文件
  ip_hash 同一个用户保持在一个机器上

  不支持去代理https
  ssl 原理

  https 是加密的传输
  每次传输都是随机的
  生成SSL密钥对

  生成密钥

  转换key 去掉密钥密码
  -in 指定密钥 -out 指定输出

  生成请求文件 名字可以自己定义

  生成公钥文件 -days 证书日期

  配置nginx ssl

  编辑新配置文件 监听端口443

  创建root 目录

  检测语法 报错

  重新编译 需要ssl_module

  加上ssl_module &&make&& make install

  重新检测语法没有报错

  重新启动服务 查看端口多了一个443

  在root 目录下创建文件

  证书被标记为不可信任

  提示访问不安全

  沃通电子认证买证书
  场景:1台nginx去代理4台apache
  需求:根据不同的请求uri 代理到不同的apache
  nginx的配置文件为:

[*]upstream aa.com {
[*]server 192.168.0.121;
[*]server 192.168.0.122;
[*]}
[*]upstream bb.com {
[*]server 192.168.0.123;
[*]server 192.168.0.124;
[*]}
[*]server {
[*]listen       80;
[*]server_namewww.abc.com;
[*]location ~ aa.php
[*]{
[*]proxy_pass http://aa.com/;
[*]proxy_set_header Host   $host;
[*]proxy_set_header X-Real-IP      $remote_addr;
[*]proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
[*]}
[*]location ~ bb.php
[*]{
[*]proxy_pass http://bb.com/;
[*]proxy_set_header Host   $host;
[*]proxy_set_header X-Real-IP      $remote_addr;
[*]proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
[*]}
[*]}
  nginx代理--根据访问的目录来区分后端的web
  我的需求: 当请求的目录是 /aaa/ 则把请求发送到机器a,当请求的目录为/bbb/则把请求发送到机器b,除了目录/aaa/与目录/bbb/外,其他的请求发送到机器b
  配置文件内容为:

[*]upstream aaa.com
[*]{
[*]server 192.168.111.6;
[*]}
[*]upstream bbb.com
[*]{
[*]server 192.168.111.20;
[*]}
[*]server {
[*]listen 80;
[*]server_name li.com;
[*]location /aaa/
[*]{
[*]proxy_pass http://aaa.com/aaa/;
[*]proxy_set_header Host   $host;
[*]proxy_set_header X-Real-IP      $remote_addr;
[*]proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
[*]}
[*]location /bbb/
[*]{
[*]proxy_pass http://bbb.com/bbb/;
[*]proxy_set_header Host   $host;
[*]proxy_set_header X-Real-IP      $remote_addr;
[*]proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
[*]}
[*]location /
[*]{
[*]proxy_pass http://bbb.com/;
[*]proxy_set_header Host   $host;
[*]proxy_set_header X-Real-IP      $remote_addr;
[*]proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
[*]}
[*]}  说明:
  1 以上配置文件中的 aaa.com 以及 bbb.com 都是自定义的,随便写。
  2 upstream 中的server 可以写多个,例如
  upstream aaa.com
  {
  server 192.168.111.6;
  server192.168.111.4;
  server192.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信息找不到了。解决这个问题有两个思路:

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

[*]upstream test {
[*]ip_hash;
[*]server 192.168.109.5;
[*]server 192.168.109.3;
[*]}  关键代码: ip_hash
  这样,nginx会把用户的请求一直转发到后端的某台机器
  http://blog.sina.com.cn/s/blog_72995dcc01016msi.html


页: [1]
查看完整版本: nginx负载均衡,