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.测试(火狐浏览器)
参考:官网http://nginx.org/en/docs/http/configuring_https_servers.html#single_http_https_server
推荐阅读
-
Nginx配置https以及将http请求转发到https
-
Nginx 配置http和https 同时访问
-
nginx配置访问密码,输入用户名和密码才能访问
-
Nginx核心模块——HTTP中的配置指令location和rewrite介绍
-
nginx配置图片访问路径:root和alias
-
再次问高手 linux下apache配置ssl后为何https和http都可以访问等有关问题 100分
-
Nginx反向代理tcp和http协议配置
-
详解nginx同一端口监听多个域名和同时监听http与https
-
nginx http重定向https配置说明
-
CentOS7 配置Nginx支持HTTPS访问的实现方案