Nginx配置HTTPS

/ Nginx / 2 条评论 / 532人围观

为什么要接入HTTPS?HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,要比HTTP协议安全。HTTP 标准端口是80 ,而 HTTPS 的标准端口是443。 推荐一篇文章,介绍的很详细:httpss://www.cnblogs.com/xinzhao/p/4949344.html。

SSL证书的申请

这个就比较敢敢单单了,我用的是阿里云申请的域名,直接去有域名的账号下,申请免费的SSL,大概10分钟就能申请下来,非常方便快捷,一键操作。

下载CA颁发的证书

点击下载,是一个zip包,其中包含两个文件(xxx.key和xxx.pem)

nginx下配置证书

这一步网上真的是五花八门

  1. 在nginx的安装目录下(比如我的就在/usr/local/nginx),创建一个叫cert的文件夹(名字随便起)
mkdir cert
  1. 将解压出来的两个文件全部拷贝到此目录下面
  2. 打开conf目录中的nginx.conf配置文件修改443端口监听配置。Nginx默认配置是将443端口的监听配置注释掉了的,如下:
# HTTPS server
# #server {
# listen 443;
# server_name localhost;
# ssl on;
# ssl_certificate cert.pem;
# ssl_certificate_key cert.key;
# ssl_session_timeout 5m;
# ssl_protocols SSLv2 SSLv3 TLSv1;
# ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
# ssl_prefer_server_ciphers on;
# location / {
#
#
#}
#}
  1. 放开此代码,稍作修改,如下:
server {
    listen 443;
    server_name www.nmyswls.com;
    ssl on;
    ssl_certificate   /usr/local/nginx/cert/214293826510663.pem;
    ssl_certificate_key  /usr/local/nginx/cert/214293826510663.key;
    ssl_session_timeout 5m;
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers on;
    location / {
        proxy_pass https://mystory;
        # 以下是为了让nginx知道,访问用户的真实ip是多少
	proxy_set_header Host $https_host; 
        proxy_set_header X-Real-IP $remote_addr; 
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}
    upstream mystory {
        server xx.104.129.162:xxxx weight=5;
        server xx.104.189.224:xxxx weight=5;
	# ip_hash;
    }

简单介绍下参数:

其实到这里httpss的配置已经算ok了

尝试重启一下nginx,切到nginx安装目录下的sbin目录下,执行命令:

nginx -s reload

如果重启成功说明配置没问题,我这边出现一个问题,报这个错:

nginx: [emerg] unknown directive "ssl" in /usr/local/nginx/conf/nginx.conf:102

这说明没有安装ssl的模块,可以尝试如下解决办法:

1.进入nginx的源码目录(在安装目录下面的nginx-1.3.2),不是安装目录

cd nginx-1.3.2

2.执行:

./configure --prefix=/usr/local/nginx --with-https_stub_status_module --with-https_ssl_module --with-file-aio --with-https_realip_module

3.然后执行make命令,千万不能执行make install命令 make完之后在objs目录下就多了个nginx,这个就是新版本的程序了 把新的nginx程序覆盖旧的

cp objs/nginx /usr/local/nginx/sbin/nginx

4.测试新的nginx程序是否正确?

/usr/local/nginx/sbin/nginx -t

出现以下代码说明成功了

nginx: theconfiguration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx:configuration file /usr/local/nginx/conf/nginx.conf test issuccessful

https转httpss

只需要在监听80端口的时候自动跳转到443端口就可以了

server {
    listen 80;
    server_name localhost;
    location = / {
		rewrite ^(.*) httpss://$host$1 permanent;
        }
    location / {
                rewrite ^(.*) httpss://$host$1 permanent;
    }
}

这里配置的时候出现一个问题,就是每次访问页面的时候,域名后面都会有一个“/”, 例如:httpss://www.nmyswls.com//article/34 对访问没什么影响,但是很难受,最后请教了一个朋友帮我解决了, 在上面代码重定向的时候不能写成:rewrite ^(.) httpss:/www.nmyswls.com$1 permanent; 应该写成:rewrite ^(.) httpss://$host$1 permanent;就木问题了


不知道是不是因为我的服务器是突发性实例,加上了httpss后访问速度有点变慢,先观察一段时间不行的话只好不用httpss了

最终还是把httpss去掉了,不知道是哪里的原因,可能突发性实例就这尿性把,总感觉网页响应速度慢半拍2018-06-30 22:40

  1. httpss?

    回复
  2. 向胖哥学习

    回复