Nginx | nginx 配置 https 及各种问题解决

一、项目背景

  在生产环境下,已经安装 Nginx,并能够正常运行。鉴于客户要求,将在运行的 nginx 由 http 协议更改为 https 协议。并且,当输入http://域名/路径 时,能够跳转到 https://域名/路径

二、添加 http_ssl_module

2.1 编译Nginx,添加SSL模块

2.1.1 全新安装的 Nginx

  针对全新安装的Nginx,编译时添加对应的ssl模块即可

./configure --prefix=/usr/local/nginx --with-http_ssl_module

#预编译时,添加 --with-http_ssl_module
2.1.2 已安装的 Nginx
2.1.2.1 获取有https模块的 nginx 可执行文件
2.1.2.1.1 编译生成nginx可执行文件
wget http://nginx.org/download/nginx-1.9.15.tar.gz
#下载原版本的nginx

tar zxvf nginx-1.9.15.tar.gz
#解压nginx

cd nginx-1.9.15
#进入解压后的nginx文件夹

./configure --prefix=/usr/local/nginx --with-http_ssl_module
#指定现在的nginx目录并添加 --with-http_ssl_module

make
#进行编译,而不进行安装
2.1.2.1.2 执行后查看nginx可执行文件

在这里插入图片描述

2.1.2.2 复制新nginx可执行文件并授权

  复制新nginx可执行文件并授权nginx可执行文件,若不授权则可能不能正常启动
在这里插入图片描述

2.2 确定 http_ssl_module 是否安装成功

/usr/local/nginx/sbin/nginx -V
#要根据自己的实际nginx可执行文件进行是修改

在这里插入图片描述

三、配置 https 的 SSL证书

3.1 上传 SSL 证书到指定目录

  相关的路径和文件名要进行记录,便于配置使用
在这里插入图片描述

3.2 修改 nginx 的配置文件

vim /usr/local/nginx/conf/nginx.conf

  在 [server] 模块下进行相关配置的添加, 这些都是腾讯云推荐的配置,直接拿来用就行了,只是修改证书的路径,注意这些路径是相对于/etc/nginx/nginx.conf文件位置,也可以使用绝对路径。

.....
#上述配置,请忽略
http {
    include       mime.types;
    default_type  application/octet-stream;
    server_names_hash_bucket_size 128;
    large_client_header_buffers 4 64k;
    client_max_body_size 20m;               #上传文件最大值
    server_tokens off;                      #隐藏nginx版本号

    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';

    #access_log  logs/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;
    fastcgi_connect_timeout 300;
    fastcgi_send_timeout 300;
    fastcgi_read_timeout 300;
    fastcgi_buffer_size 64k;
    fastcgi_buffers 4 64k;
    fastcgi_busy_buffers_size 128k;
    fastcgi_temp_file_write_size 128k;


    gzip  on;
    gzip_min_length 1k;
    gzip_buffers 4 16k;
    gzip_http_version 1.1;
    gzip_comp_level 3;
    gzip_types text/plain application/x-javascript text/css application/xml;
    gzip_vary on;

    include /usr/local/nginx/conf.d/*.conf;

    server {
        listen        443 ssl;
        server_name   cj.xxxx.edu.cn;
        client_body_buffer_size 50m;
        client_max_body_size 100m;

        #charset koi8-r;

#这些都是腾讯云推荐的配置,直接拿来用就行了,只是修改证书的路径,注意这些路径是相对于/etc/nginx/nginx.conf文件位置

        ssl on;
        ssl_certificate          /usr/local/nginx/ssl/xxx.edu.cn.cer.pem;
        ssl_certificate_key     /usr/local/nginx/ssl/xxx.edu.cn.key.pem;
        ssl_session_timeout 15m;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
        ssl_prefer_server_ciphers on;

#设置ibpsv3转发规则
        location /ibpsv3 {
                proxy_pass http://ibpsHost;
                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 REMOTE-HOST $remote_addr;
                add_header 'Access-Control-Allow-Origin' '*';

                }
......
#下述配置文件,请忽略
          }
 }

在这里插入图片描述
  配置文件解析


  ssl on;
  ssl_certificate         1_XXX.com_bundle.crt;
  ssl_certificate_key     2_XXX.com.key;
  ssl_session_timeout 5m;
#客户端可以重用会话缓存中ssl参数的过期时间,内网系统默认5分钟太短了,可以设成30m即30分钟甚至4h。
  ssl_protocols TLSv1 TLSv1.1 TLSv1.2; 
#按照这个协议配置
  ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
#按照这个套件配置
  ssl_prefer_server_ciphers on;
#设置协商加密算法时,优先使用我们服务端的加密套件,而不是客户端浏览器的加密套件。

四、查看效果

在这里插入图片描述

五、http重定向到https

  注意是新增对80端口的监听,这样请求80,才能转到443。在https的server中直接修改会造成死循环。
  即http的80 server{ } 和 https的 443 server{ } 应均存在

5.1 第一种方式使用return 301:

#......省略
server {
    listen 80;
    server_name  www.xxxx.edu.cn;
    #server_name 后面建议加域名
    return 301 https://127.0.0.1$request_uri;
    }

#......省略
 server {
    listen        443 ssl;
    server_name   www.xxxx.edu.cn;
    }

#......省略

5.2 第二种方式使用rewrite:

#......省略
server {
    listen 80;
    server_name   www.xxxx.edu.cn;
    #server_name 后面建议加域名
    rewrite ^(.*)$ https://$host$1 permanent;
    }

#......省略
	
 server {
    listen        443 ssl;
    server_name   www.xxxx.edu.cn;
    }
    
#......省略

六、附nginx工具

https://www.digitalocean.com/community/tools/nginx

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值