欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Nginx 配置http和https 同时访问

程序员文章站 2024-03-24 13:55:22
...

一、HTTPS配置

1.生成测试https证书

# 1.创建服务器私钥,执行以下命令,会让你输入一个口令,要记住它:
openssl genrsa -des3 -out server.key 1024

# 2.创建签名请求的证书(CSR):
#这里执行后会让你填写一些服务器相关信息,如域名、公司等数据
openssl req -new -key server.key -out server.csr

# 3.在加载SSL支持的nginx并使用上述私钥时除去必须的口令:
cp server.key server.key.org
openssl rsa -in server.key.org -out server.key
 
# 4.最后标记证书使用上述私钥和csr:
# 参数说明: -days 设定签证有效期,设定3650,10年有效期
openssl x509 -req -days 3650 -in server.csr -signkey server.key -out server.crt

2.构建nginx容器测试

# 暴露80和443端口,将当前文件夹挂载到nginx配置目录中,上一步**挂载到容器内
docker run -ti -p 80:80 -p 443:443 -v $(PWD):/etc/nginx/conf.d/ nginx bash

3.修改default.conf文件如下

server {
    server_name localhost;
    listen 80;
    listen 443 ssl;
    # ssl on;
    ssl_certificate /etc/nginx/conf.d/server.crt;
    ssl_certificate_key /etc/nginx/conf.d/server.key;
    ssl_protocols       TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers         HIGH:!aNULL:!MD5;

4.测试nginx配置文件是否正确

nginx -t
# 确认无误后
service nginx restart
    出现报错如下:

2020/09/09 09:45:52 [emerg] 50#50: SSL_CTX_use_certificate("/etc/nginx/conf.d/server.crt") failed (SSL: error:140AB18F:SSL routines:SSL_CTX_use_certificate:ee key too small)
nginx: [emerg] SSL_CTX_use_certificate("/etc/nginx/conf.d/server.crt") failed (SSL: error:140AB18F:SSL routines:SSL_CTX_use_certificate:ee key too small)
nginx: configuration file /etc/nginx/nginx.conf test failed

错误原因:ca证书密码太短,应长于2048bit https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=907888
解决方法:先用修改openssl全局变量,取消对长度限制,推荐还是增加密码长度

# 修改容器内/etc/ssl/openssl.cnf 文件,调整参数
CipherString = aaa@qq.com=2
改成
CipherString = aaa@qq.com=1

5.测试(火狐浏览器)

Nginx 配置http和https 同时访问
Nginx 配置http和https 同时访问

参考:官网http://nginx.org/en/docs/http/configuring_https_servers.html#single_http_https_server

相关标签: 运维 nginx