Nginx实现HTTPS安全协议

前段时间,公司需要对一个多应用模块的项目实现访问安全,在网上调研了下,最后决定使用nginx实现https安全协议

1. 应用背景

平台应用模块较多,原本平台代理引入了nginx,经查询资料nginx本身支持https的协议请求,因此本次设计通过nginx对所有请求做安全化,对外请求统一使用https协议,内部模块之间请求仍使用API接口。

2. 使用nginx https的优点

  1. Nginx自身支持https安全协议技术已经成熟
  2. Nginx本身为代理层,在nginx层设置https安全协议,可对所有应用模块适用
  3. Nginx中配置https安全协议,无需更改任何应用模块

3. 场景模拟

  • 独立服务器

独立服务器: 网络环境中不经过防火墙,且有且仅有一台主机服务器,nginx开启https请求,将站点对外访问转为安全协议,对内仍可http协议的API接口

  • 冗余环境

冗余环境: 满足项目中冗余环境,当主机服务器宕机时,会将从机升级为主机,保证当前环境仍可满足安全访问,客户端通过域名访问站点,DNS服务器(网络设置配置多DNS),检测可以ping通的DNS主机作为目标机,检测该主机上nginx所配置的服务器名称,访问站点,当主机挂掉时,主机DNS将ping不通,直接访问指向从机

  • 网络防火墙

网络中有防火墙: 当网络环境中有防火墙时,访问请求需经过防火墙做IP和端口映射,并且设置服务器的网关与防火墙端口网管相同。

4. Nginx启用https

ginx启用https安全协议分为:生成证书和修改nginx.conf文件

  • 生成证书
  1. 在 nginx安装目录中创建ssl文件夹用于存放证书
  2. 创建私钥
  3. 创建csr证书
  4. 去除密码
  5. 生成crt证书
  • 修改nginx.conf文件
  1. 启用nginx.conf文件中的https协议
  2.  https监听443端口(默认)
  3. 配置https协议使用csr和crt证书
  4. 指定ssl为on
  5. 指定项目默认页面
  6.  重启nginx

nginx.conf文件模板如下:

#user  nobody;
worker_processes  1;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;


events {
    worker_connections  1024;
}


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

    access_log      logs/****.access.log;
    error_log       logs/****.error.log;
    
    sendfile        on;

    keepalive_timeout  65;


    # HTTPS server
    #
   server {
        listen       443;  #ssl端口 
        listen       18092;   #用户习惯用http访问,加上80,后面通过497状态码让它自动跳到443端口 
        server_name  192.192.192.190; 
        #为一个server{......}开启ssl支持 
        ssl        on; 
        #ssl_certificate      ../ssl/***.crt;
       
           ssl_certificate      ../test/***.crt;
        ssl_certificate_key  ../test/***.key;
       
        #让http请求重定向到https请求  
        error_page 497  https://$http_host$uri?$args;

       ssl_session_cache    shared:SSL:1m;
       ssl_session_timeout  5m;

       ssl_ciphers  HIGH:!aNULL:!MD5;
       ssl_prefer_server_ciphers  on;        

       location / {
            proxy_pass  http://192.192.192.192:18090;
            proxy_set_header Host      $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_redirect http:// $scheme://; #做https跳转
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
       }
        
        location ~\.(action) { 
           proxy_pass http://192.192.192.192:18090; 
           #proxy_redirect off; 
           client_max_body_size 100m; 
           proxy_set_header Host $http_host; 
           proxy_set_header X-Real-IP $remote_addr; 
           proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
           proxy_connect_timeout 1;
           proxy_read_timeout 360;
           proxy_buffering off;
           expires off;
       } 
        location ~\.(html) { 
           proxy_pass http://192.192.192.192:18090; 
           #proxy_redirect off; 
           client_max_body_size 100m; 
           proxy_set_header Host $http_host; 
           proxy_set_header X-Real-IP $remote_addr; 
           proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
           proxy_connect_timeout 1;
           proxy_read_timeout 360;
           proxy_buffering off;
           expires off;
       } 
   }

}


 

展开阅读全文

没有更多推荐了,返回首页