• nginx反向代理的一次实践


    场景:前端(VUE.js)应用部署在linux服务器,需要支持http和https访问。

    问题1:阿里服务器不支持域名访问?

    通过域名绑定服务器解决

    问题2:如何通过http访问前端

    前端通过nginx访问反向代理,在浏览器直接访问。

    问题3:如何通过https访问前端

    由于通过nginx反向代理是http协议,要支持https协议,需要安装ssl证书

    https是基于SSL/TLS协议,使用非对称、对称、hash算法,通过crt证书返回给浏览器

    如果申请不成功,参照阿里的配置,在ssl控制台申请ca免费证书

    1、生成证书  创建服务器私钥
    openssl genrsa -des3 -out server.key 1024
    2、创建签名请求的证书(csr); csr核心内容是一个公钥
    openssl req -new -key server.key -out server.csr
    3、去除使用私钥是的口令验证
    cp server.key server.key.org
    openssl rsa -in server.key.org -out server.key
    4、标记证书使用私钥和csr
    openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt

    server.crt是我们最终需要的证书

    创建完证书之后开始nginx配置

    server {
    
            listen       443 ssl;
            server_name  web.com.cn;
            ssl_certificate      "/etc/nginx/cert/server.crt";
            ssl_certificate_key  "/etc/nginx/cert/server.key";
            ssl_session_cache    shared:SSL:1m;
            ssl_session_timeout  10m;
            ssl_ciphers HIGH:!aNULL:!MD5;
            ssl_prefer_server_ciphers on;
            include /etc/nginx/default.d/*.conf;
            location / {
                proxy_pass   http://127.0.0.1/;  #转发的IP地址
            }
            error_page 404 /404.html;
            location = /40x.html {
            }
            error_page 500 502 503 504 /50x.html;
             location = /50x.html {
            }
        }

    此配置我用户转发https协议变成http请求

    下面配置nginx作为静态服务器使用

    server {
            listen       80 default_server;
            #listen       [::]:80 default_server;
            server_name  _;
            root         /usr/share/nginx/html;
    
            # Load configuration files for the default server block.
            include /etc/nginx/default.d/*.conf;
    
            location / {
                    proxy_set_header   Host    $host;
                    root 根目录前端应用;
                    index index.html index.html;
                    try_files $uri $uri/ @router;
    
            }
            location @router {
                rewrite ^.*$ /index.html last;
            }
            error_page 404 /404.html;
                location = /40x.html {
            }
            error_page 500 502 503 504 /50x.html;
                location = /50x.html {
            }
        }

    到此两个配置完成时候重新加载nginx -s reload

    通过浏览器即可访问

    server内同时配置反向代理和静态文件的方式 这个是服务器生成

    server {
    
            listen       443 ssl;
            server_name  填写域名;
            ssl_certificate      "/etc/nginx/cert/https.crt";
            ssl_certificate_key  "/etc/nginx/cert/https.key";
            ssl_session_cache    shared:SSL:1m;
            ssl_session_timeout  10m;
            ssl_ciphers HIGH:!aNULL:!MD5;
            ssl_prefer_server_ciphers on;
            include /etc/nginx/default.d/*.conf;
    
            location /front {
                proxy_pass   http://127.0.0.1:7000/;
            }
    
            location / {
                proxy_set_header   Host    $host;
                root /etc/nginx; #静态文件目录
                index index.html index.html;
                try_files $uri $uri/ @router;
            }
    
            error_page 404 /404.html;
            location = /40x.html {
            }
    
            error_page 500 502 503 504 /50x.html;
             location = /50x.html {
            }
    
        }

    使用阿里证书

    server {
    
            listen       443 ssl;
            server_name 域名;
            ssl on;
            ssl_certificate      /etc/nginx/cert/2703312_aa.com.cn.pem;
            ssl_certificate_key  /etc/nginx/cert/2703312_aa.com.cn.key;
            ssl_session_timeout 5m;
            ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
            ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
            ssl_prefer_server_ciphers on;
            
            location / {
                    proxy_set_header   Host    $host;
                    root /opt/dev/aa/aabb;
                    index index.html index.html;
                    try_files $uri $uri/ @router;
    
            }
    
            error_page 404 /404.html;
            location = /40x.html {
            }
    
            error_page 500 502 503 504 /50x.html;
             location = /50x.html {
            }
    
        }

    nginx是一个功能非常强大的web服务器常用的三个核心功能是反向代理、负载均衡和静态服务器。

    nginx支持的负载均衡调度算法方式如下:

    weight轮询(默认):接收到的请求按照顺序逐一分配到不同的后端服务器,即使在使用过程中,某一台后端服务器宕机,nginx会自动将该服务器剔除出队列,请求受理情况不会受到任何影响。 这种方式下,可以给不同的后端服务器设置一个权重值(weight),用于调整不同的服务器上请求的分配率;权重数据越大,被分配到请求的几率越大;该权重值,主要是针对实际工作环境中不同的后端服务器硬件配置进行调整的。

    ip_hash:每个请求按照发起客户端的ip的hash结果进行匹配,这样的算法下一个固定ip地址的客户端总会访问到同一个后端服务器,这也在一定程度上解决了集群部署环境下session共享的问题。

    fair:智能调整调度算法,动态的根据后端服务器的请求处理到响应的时间进行均衡分配,响应时间短处理效率高的服务器分配到请求的概率高,响应时间长处理效率低的服务器分配到的请求少;结合了前两者的优点的一种调度算法。但是需要注意的是nginx默认不支持fair算法,如果要使用这种调度算法,请安装upstream_fair模块

    url_hash:按照访问的url的hash结果分配请求,每个请求的url会指向后端固定的某个服务器,可以在nginx作为静态服务器的情况下提高缓存效率。同样要注意nginx默认不支持这种调度算法,要使用的话需要安装nginx的hash软件包

  • 相关阅读:
    常用软件整理列表
    红黑树的旋转(C语言)
    Linux 内核编译
    2017年9月11日
    2017年 9月10日
    2017年9月8号 开学第一天
    开始学习.net的第二天
    前端工作需要什么
    Kubernetes容器编排技术---Kubernetes基本概念和术语(一)
    监控工具之---Prometheus探索PromQL(二)
  • 原文地址:https://www.cnblogs.com/mutong1228/p/11396536.html
Copyright © 2020-2023  润新知