zoukankan      html  css  js  c++  java
  • Nginx *(http转htpps,并支持80端口继续提交post请求)

    项目是一个web server + 多个client的形式,client由用户安装在自己的电脑上

    由http升级为https后,我们通过在Nginx做了80端口重定向443的配置,使用户通过访问http:xxx.xxxx.com服务器时转为https:xxxx.xxxx.com

    基于这样的需求我们在做了如下配置:

        server {
    
            listen 443;
            server_name oss-test.intel.com; # 项目域名
    
            ssl on;
            ssl_certificate xxxx.crt; #(证书公钥)
            ssl_certificate_key xxxx.key; #(证书私钥)
    
            ssl_session_timeout 5m;
            ssl_protocols  SSLv2 SSLv3 TLSv1;
            ssl_ciphers  HIGH:!aNULL:!MD5;
            ssl_prefer_server_ciphers on;
    
            location / {
                proxy_pass      http://xxx.xxx.xxx.xxx:8000; # 后台服务 地址
            }
    
        }
    
        server {
            listen  80;
            server_name  xxx.xxx.xxx.com;      # 域名
            # to https
            return 301 https://$server_name$request_uri;
    }

    以上配置可满足http 转 https需求,

    可以看到当用户不指定https协议时发起请求时,nginx已经通过重定向指向了https

    但是之前安装的client还是在向http发送post请求,此时就会出错,因为上面的nginx重定向会丢失post参数,转为get请求,而此api只接受post方式

    解决方式  重定向于代理方式共存:

    修改nginx配置 server 80部分:

    server {
            listen  80;
            server_name  xxx.xxx.xxx.com;      # 域名
            if ($request_method ~* GET) {                                    # 如果是是GET请求,直接重定向https
                return 301 https://$server_name$request_uri;
            }

    # 否则就会直接请求后台服务器
            location / {
                proxy_pass      http://xxx.xxx.xxx.xxx:8000; # 后台服务 地址
            }
    }
    
    

    至此,同时满足以上两种需求

    积一时之跬步,臻千里之遥程
  • 相关阅读:
    Android AlertDialog警告对话框实现
    Android状态栏通知Status Bar Notification
    Android spinner控件的实现
    Winform之UI后台线程
    Winform之自定义控件
    WebForm原理,aspx服务器端与客户端源码比较
    IHttpModule之闲扯
    [算法]方正面试题:N×N矩阵螺旋打印输出
    DOTA版设计模式——工厂方法
    Window服务
  • 原文地址:https://www.cnblogs.com/wangbaojun/p/10621404.html
Copyright © 2011-2022 走看看