• Nginx 容器反向代理和 SSL 配置


    前言

    本文简记使用 Nginx 容器进行反向代理和 SSL 配置。

    Nginx 容器部署

    反向代理

    最简单示例

    • server{} 块中的 localtion 块:

      server{
        listen 80;
        server_name localhost;
        location / {
          proxy_pass http://192.168.1.110;
        }
      }
      

    location 映射规则

    优先级

    • 排列:

      (= 匹配) > (路径匹配) > (开头路径匹配) > (正则匹配) > (通用匹配) > (默认/匹配)
      
    • 示例:

      (location =) > (location /xxx/) > (location ^~) > (location ~/~*) > (location /xxx) > (location /)
      

    = 匹配

    • 示例:

      location = / {
        ......
      }
      
    • 精准匹配,主机名后面不能跟任何字符串。

    路径匹配

    • 示例:

      locatio /xxx/ {
        ......
      }
      
    • 精准匹配,只匹配主机名后面 /xxx/ 字符串。

    通用匹配

    • 示例:

      location /XXX {
        ......
      }
      
    • 匹配以 XXX/xxx 开头的路径。

    正则匹配

    • 示例:

      location ~ /XXX {
        ......
      }
      
    • 匹配以 XXX/xxx 开头的路径。

    • 实际上

    开头路径匹配

    • 示例:

      location ^~ /XXX/ {
        ......
      }
      
    • 匹配以 XXX/xxx 开头的路径。

    结尾路径匹配

    • 示例:

      ~* . (gif/jpg/png)$ {
        ......
      }
      
    • 匹配以 gif/jpg/png 结尾的路径。

    我的示例

    • 我的 Nginx 配置示例:

      upstream rasamber-owncloud{
              server 192.168.1.110:10100;
      }
      upstream rasamber-pi-dashboard{
              server 192.168.1.110:10000;
      }
      
      server{
        listen 80;
        return 301 https://$host$request_uri;
      }
      
      server{
        listen 443 ssl;
        server_name rasamber;
        
        # SSL 设置
        ......
        
        # HSTS
        add_header Strict-Transport-Security "max-age=15552000; includeSubdomains; preload; connect-src *";
      
        location /owncloud/ {
          proxy_pass http://rasamber-owncloud/owncloud/;
          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   Cookie $http_cookie;
          proxy_cookie_path /owncloud/ /;
          client_max_body_size 5000M;
        }
      
        location /pi-dashboard/ {
          proxy_pass http://rasamber-pi-dashboard/pi-dashboard/;
          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   Cookie $http_cookie;
          proxy_cookie_path /pi-dashboard/ /;
        }
        
        location / {
          root /etc/nginx/conf.d/nginxHtml;
          index  index.html index.htm;
        }
      }
      
    • 一些参数:

      • 更多请参阅: Nginx 反向代理 owncloud 问题处理

      • client_max_body_size :Nginx 默认只允许传输 2M 大小的文件,owncloud 传输文件动辄几百兆、几个G,需要设置允许最大文件传输大小。

      • proxy_set_header :多个参数设置,为了避免 owncloud 等 docker 容器判断不信任域名访问,将 Nginx 代理访问给排除。

      • add_header Strict-Transport-Security :是为了开启 HSTS 。

    配置 SSL 证书

    • 请参阅: 树莓派/Debian Apache2 实现 HTTPS(SSL) 服务

      讲了部署 HTTPS 的两种方式:

      • 使用第三方 CA 。
      • 使用自建 CA 。
    • 将生成的 Server 证书和密钥放到你的目标文件夹,在 Nginx 的 /etc/nginx/conf.d/default.conf 文件中设置:

      server{
        listen 80;
        return 301 https://$host$request_uri;
      }
      
      server{
        listen 443 ssl;
        server_name localhost;
      
        # SSL
        ssl_certificate /etc/nginx/conf.d/ownSSL/Server/Server_root.crt;
        ssl_certificate_key /etc/nginx/conf.d/ownSSL/Server/Server_private.key;
        
        ssl_session_timeout 5m;
        ssl_protocols SSLv2 SSLv3 TLSv1;
        ssl_ciphers HIGH:!aNULL:!MD5;
        ssl_prefer_server_ciphers on;
        ssl_session_cache shared:sslcache:20m;
      
        location /owncloud/ {
          ......
        }
      }
      
    • 检查配置正确与否:

      nginx -t
      
    • 重载配置文件:

      nginx -s reload
      
    • 然后重启 Nginx 容器即可:

      sudo docker-compose restart
      
    • 要注意,Nginx 的 SSL 设置与 Apache 不同的一点细节:

      • Nginx 的 SSL 设置最后要加 ; 英文分号。
  • 相关阅读:
    天明闹钟开发过程3
    降低 TCP ACK 延迟造成的网络性能损失
    TCP SYN,ACK 详解
    TCP的SEQ和ACK的生成
    python之线程(threading)
    python之进程(multiprocess)
    python之发送邮件~
    python之函数参数问题(参数为可变对象)
    python之斐波那契数列递归推导在性能方面的反思
    linux中一些简便的命令之tac/comm
  • 原文地址:https://www.cnblogs.com/Yogile/p/13358013.html
Copyright © 2020-2023  润新知