负载均衡 [Nginx]

本贴最后更新于 282 天前,其中的信息可能已经时移世易

文献:

nginx 官网

中文文档

英文文档

Windows

我用的版本号: nginx/Windows-1.20.1


1、解压后的文件夹:
在这里插入图片描述


2、进入到 conf 文件夹。我们的配置是 nginx.conf
在这里插入图片描述


3、添加如下的配置
在这里插入图片描述

3.1 配置代码:

upstream localhost_server{
server localhost:8096 ;
server localhost:8095 ;
}

location / {
    proxy_pass http://localhost_server;
}

4、双击 nginx.exe 文件
在这里插入图片描述


5、安装成功的话,在文件管理器中可以查到对应的进程
在这里插入图片描述
还可以访问你配置的地址:
在这里插入图片描述


6、按照步骤,恭喜你搭载好了

重新加载配置文件的命令

常用命令

  1. 重新加载配置文件 nginx -s reload
  2. 启动 Nginx 服务 nginx -c /etc/nginx/nginx.conf
  3. 查看 Nginx 的版本号:nginx -V
  4. 启动 Nginx:start nginx
  5. 快速停止或关闭 Nginx:nginx -s stop
  6. 正常停止或关闭 Nginx:nginx -s quit
  7. 杀死 Nginx 所有进程 taskkill /im nginx.exe /f

发布过程遇到问题集锦

1、每次更改 config 之后,需要 执行以下 reload 命令,但是我每次 reload 之后,在服务器中,nginx 访问是正常的,在本地机器上就不行。推荐你执行以下 杀死所有 nginx 进程之后,重新双击 nginx.exe 文件,最后再去执行 reload 命令


2、解决我当前遇到的问题:
当服务器中的程序池挂掉后,访问 iis 会报 503 的问题。
在这里插入图片描述

nginx 策略:轮询(默认)
max_fails=1
假设配置两个节点 A 和 B,手动把 B 节点关掉,则在 Nginx 轮询到 B 节点时,发现该节点不可用,会自动转去调 A 节点,而不会返回失败,也就是说,调用方并不会收到一次调用失败(一次都不会)。

    upstream localhost_server{
        server 127.0.0.1:8096 max_fails=1 ;
        server 127.0.0.1:8095 max_fails=1;
    }
    location / {
            proxy_pass http://localhost_server;
			proxy_next_upstream error timeout http_503 ; #如果你还有其他的问题,可以参考下面,多个用英文空格分开
   }
//proxy_next_upstream 配置
proxy_next_upstream error | timeout | invalid_header | http_500 | http_502 | http_503 | http_504 | http_403 | http_404 | http_429 | non_idempotent | off ...;
Default:    proxy_next_upstream error timeout;
Context:    http, server, location

指定应将请求传递到下一个服务器的情况:
error             # 与服务器建立连接,向其传递请求或读取响应头时发生错误;
timeout           # 在与服务器建立连接,向其传递请求或读取响应头时发生超时;
invalid_header    # 服务器返回空的或无效的响应;
http_500          # 服务器返回代码为500的响应;
http_502          # 服务器返回代码为502的响应;
http_503          # 服务器返回代码为503的响应;
http_504          # 服务器返回代码504的响应;
http_403          # 服务器返回代码为403的响应;
http_404          # 服务器返回代码为404的响应;
http_429          # 服务器返回代码为429的响应(1.11.13);
non_idempotent    # 通常,请求与 非幂等 方法(POST,LOCK,PATCH)不传递到请求是否已被发送到上游服务器(1.9.13)的下一个服务器; 启用此选项显式允许重试此类请求;
off               # 禁用将请求传递给下一个服务器。

添加好配置后,再次访问就不会再有 503 的错误了
我停掉的 8095 已经不会访问了
在这里插入图片描述


3、添加日志

location /status {       #访问位置为/status
            stub_status on;     #打开状态统计功能
            access_log off;     #关闭此位置的日志记录
        }


配置多个证书和域名

worker_processes  1;

events {
    worker_connections  1024;
}


http {
    include       mime.types;
    default_type  application/octet-stream;

    sendfile        on;

    keepalive_timeout  65;

    upstream default_server{
        server IP:PORT ;
    }

    server {
   	  listen 443 ssl;
     	  server_name xxx.com www.xxx.com; 
     	  ssl_certificate url/xxx.com_bundle.pem; 
     	  ssl_certificate_key url/xxx.com.key; 
	  ssl_protocols TLSv1.2 TLSv1.3;
	  #以下三个配置,可以让你的域名在myssl的评分是A+
	  ssl_ciphers EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;
   	  ssl_prefer_server_ciphers on;
	  add_header Strict-Transport-Security "max-age=31536000";

	  location / {	 
	     proxy_set_header       Host $host;  
	     proxy_set_header  X-Real-IP  $remote_addr;  
	     proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;  
	     proxy_set_header X-Forwarded-Proto  $scheme;
             proxy_pass http://default_server/;  
	  }
    }

   server {
   	  listen 443 ssl;
     	  server_name xxx.cn www.xxx.cn; 
     	  ssl_certificate url/xxx.cn_bundle.pem; 
     	  ssl_certificate_key url/xxx.cn.key; 
	  #以下三个配置,可以让你的域名在myssl的评分是A+
	  ssl_protocols TLSv1.2 TLSv1.3;
	  ssl_ciphers EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;
   	  ssl_prefer_server_ciphers on;
	  add_header Strict-Transport-Security "max-age=31536000";
 	  location / {	 
	     proxy_set_header       Host $host;  
	     proxy_set_header  X-Real-IP  $remote_addr;  
	     proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;  
	     proxy_set_header X-Forwarded-Proto  $scheme;
             proxy_pass http://default_server/; 
	  }
    }

  
    server {
 	    listen 80;
 	    server_name xxx.com www.xxx.com; 
      	    rewrite ^/(.*)$ https://www.xxx.com/$1 permanent;
    }

    server {
 	    listen 80;
 	    server_name xxx.cn www.xxx.cn; 
      	    rewrite ^/(.*)$ https://www.xxx.cn/$1 permanent;
    }
}


配置外网访问服务器图片

访问路径:https://www.XXXX.com/图片名称

	  location ~ .*\.(gif|jpg|jpeg|png)$ {  
                root /xxx/files/img/;#指定文件存放路径  
         }

配置外网访问服务器图片-url 指定

访问路径:https://www.XXX.com/img/图片名称

我的实际服务器路径是:/xxx/files/img/

为何下面的路径配置中,却没有/img

因为 ningx 反代的时候,会自动在/xxx/files/后面拼上 img

因此 location 后面的路由 务必是 你的实际文件路径

image.png

	  location /img/ {          
             root /xxx/files/;#指定图片存放路径  
          }
  • NGINX

    NGINX 是一个高性能的 HTTP 和反向代理服务器,也是一个 IMAP/POP3/SMTP 代理服务器。 NGINX 是由 Igor Sysoev 为俄罗斯访问量第二的 Rambler.ru 站点开发的,第一个公开版本 0.1.0 发布于 2004 年 10 月 4 日。

    313 引用 • 547 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...