Nginx配置443端口https
通常情况下,我们需要将http连接转为https。
如http://www.baidu.com,默认是80端口,即:http://www.baidu.com:80
https://www.baidu.com,默认是443端口,即:https://www.baidu.com:443
在一般情况下,我们输入www.baidu.com 会自动跳转到https://www.baidu.com,在这中间就有http跳转https的操作。而且是http 80端口跳转https 443端口的操作。
非http 80端口跳转https 443的配置在另一篇文章中介绍。下文是介绍通过nginx做http 80条https 443的配置。
Mac下通过docker安装Nginx步骤
1.准备好所需的挂载文件夹(创建指定路径下的空文件夹,用于挂着Nginx容器内对应的文件夹)
1
| mkdir -p /Users/ux/Applications/docker/nginx/{conf,html,logs,ssl}
|
2.拉取Nginx镜像
3.1创建临时容器,用于复制配置文件
1
| docker run --name nginx -p 80:80 -d nginx
|
3.2从容器内复制配置文件到宿主机指定目录
1 2
| docker cp nginx:/etc/nginx/conf.d /Users/ux/Applications/docker/nginx/conf docker cp nginx:/etc/nginx/nginx.conf /Users/ux/Applications/docker/nginx/nginx.conf
|
3.3停止容器 删除容器
1 2
| docker stop nginx docker rm nginx
|
4、创建一个自己的配置文件,并编写配置(配置文件中的路径,应该写容器内的目录)
1
| touch /Users/ux/Applications/docker/nginx/conf/custom.conf
|
5、创建Nginx容器[注意映射80和443端口]
1 2 3 4 5 6 7 8 9 10 11
| docker run \ --name nginx \ -p 443:443 -p 80:80 \ -v /Users/ux/Applications/docker/nginx/logs:/var/log/nginx \ -v /Users/ux/Applications/docker/nginx/html:/usr/share/nginx/html \ -v /Users/ux/Applications/docker/nginx/nginx.conf:/etc/nginx/nginx.conf \ -v /Users/ux/Applications/docker/nginx/conf:/etc/nginx/conf.d \ -v /Users/ux/Applications/docker/nginx/ssl:/etc/nginx/ssl \ -e TZ=Asia/Shanghai \ --privileged=true -d \ nginx
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| 注释:
非必须参数: --network=my-network \ --network-alias=nginx-alias \ --restart=always nginx
目录释义:注意,时区很有必要
logs:日志挂载目录 html:静态文件挂载目录 conf:配置挂载目录 ssl:证书挂载目录 network:非必须,要加入的网络 network-alias:非必须,在网络中的别名 TZ:时区 privileged:让容器对挂载目录拥有读写等特权
|
Nginx配置https(conf/custom.conf下的配置),注意看1、2、3.1 、3.2 、4步骤(网上有很多教程说需要安装ssl模块,在这里无须此操作)
注意:该配置仅适用于http 80端口转https 443端口,其他端口如:8090端口http或https不适用。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65
| #如有需要 gzip也放开即可 #gzip on;
#上传文件大小限制 client_max_body_size 1024M;
##3.1 upstream负载均衡(第3.2步中反向代理需要用到该配置) upstream upstream_server{ ##java服务 server 192.168.253.2:8889; }
ignore_invalid_headers on; underscores_in_headers on; merge_slashes on;
##1.https跳转配置
server { ## 监听80和443端口 listen 80; listen 443 ssl; ##服务地址域名 server_name www.test.com; ##如果不是https 则做跳转 if ($scheme != https) { rewrite ^(.*)$ https://$host$1 permanent; #return 301 https://$host$request_uri; }
##2.让浏览器自动升级请求为https ##这一句可以让浏览器加载http的资源。但是有的浏览器不支持,比如IE add_header 'Content-Security-Policy' 'upgrade-insecure-requests';
##3.2 反向代理到服务地址 location / { root html; index index.html index.htm; #反向代理 proxy_pass http://upstream_server; proxy_set_header Host $host; proxy_set_header Connection close; proxy_connect_timeout 100ms; # 代理机器连接超时时长(默认的60s太长了) expires 30d; }
##4.ssl 证书配置 ##证书1配置方式(证书1和证书2都可以用) #ssl_certificate /etc/nginx/ssl/key1/custom.pem; #ssl_certificate_key /etc/nginx/ssl/key1/custom.key;
##ssl 证书2配置方式(证书1和证书2都可以用) ssl_certificate /etc/nginx/ssl/key2/nginx.crt; ssl_certificate_key /etc/nginx/ssl/key2/nginx.key; # SSL(包括 v3)都有漏洞,应该用 TLS(TLS1.0 = SSL 3.1) ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers HIGH:!aNULL:!MD5;
}
|
生成ssl证书补充(方式1)
1.使用以下命令检查OpenSSL命令的安装版本
2.创建RSA Private Key
1 2 3 4
| openssl genrsa -out private.key 2048
它将生成名为private.key的RSA密钥文件。 在这里,我们使用2048位密钥长度保障安全性。你甚至可以使用更小的密钥长度。
|
3.创建新的Private Key和CSR文件
1 2 3 4
| openssl req -nodes -newkey rsa:2048 -keyout custom.key -out custom.csr
它会询问详细信息,如国家代码、州和地区名称、组织名称、您的姓名、电子邮件地址等。 输入所有细节后,它将生成两个文件,一个具有CSR扩展名,另一个是私钥文件。
|
4.创建新的私钥和自签名证书
1 2 3 4 5 6
| openssl req -x509 -sha512 -nodes -days 730 -newkey rsa:2048 -keyout custom.key -out custom.pem
它会询问详细信息,如国家代码、州和地区名称、组织名称、您的姓名、电子邮件地址等。 输入所有细节后,它将生成两个文件,一个扩展名为PEM,另一个扩展名为key,分别代表自签名证书和私钥。 在本例中,我们将有效期设置为730天,但如果您没有提到这一点,那么它将默认使用一个月的时间。 您甚至可以根据自己的方便程度更改加密算法。在本例中,我们使用了SHA512算法。
|
5.验证CSR文件
1 2 3
| openssl req -noout -text -in custom.csr
它将显示您在创建CSR文件时输入的详细信息,这些信息可用于验证是否将正确的CSR文件发送到正确的接收方。
|
6.验证私钥文件
1 2 3 4
| openssl rsa -in private.key -check
它将验证和检查RSA私钥,如果它是Ok的,它将显示以下结果: RSA key OK
|
7.验证证书签发者授权
1 2 3 4
| penssl x509 -in custom.pem -noout -issuer -issuer_hash
它将显示您在创建pem文件时输入的详细信息,可用于验证是否将正确的pem文件发送到正确的接收方: writing RSA key
|
8.检查证书的哈希值
1
| openssl x509 -noout -hash -in custom.pem
|
9.它将显示pem证书文件的哈希值
1 2 3
| openssl x509 -outform der -in custom.pem -out custom.der
它将证书的扩展名从.pem转换为.der,并创建一个扩展名为.der的新文件。
|
10.检查pem文件证书的有效期
1
| openssl x509 -noout -in custom.pem -dates
|
生成ssl证书补充(方式2)
在用户目录下生产nginx.key和nginx.crt,有效期一年
1
| sudo openssl req -x509 -nodes -days 36500 -newkey rsa:2048 -keyout ~/nginx.key -out ~/nginx.crt
|
容器时区
1.进入docker中的nginx容器
1
| docker exec -it nginx /bin/bash
|
2.查看宿主机时间
3.解决办法(临时解决,容器重建就失效了):
进入容器修改时间
1 2 3 4
| # 进入容器 docker exec -it nginx /bin/bash # 修改时间 rm -f /etc/localtime && ln -sv /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
|
chrome浏览器拦截自签ssl证书https请求
直接在警告的页面上输入:thisisunsafe,网页会自动刷新,就可以访问了!
参考链接
docker容器安装nginx
https://www.cnblogs.com/revil/p/16295844.html
ssl证书生成
https://jingyan.baidu.com/article/f7ff0bfc7a30566f26bb13b0.html
https://blog.csdn.net/weixin_71429844/article/details/126667181
容器时区
https://blog.csdn.net/RAXCL/article/details/121332622
自签ssl证书被chrome拦截
https://blog.csdn.net/qq_44402184/article/details/125865817