0%

linux下Nginx配置443端口https-2022

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镜像

1
docker pull 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命令的安装版本

1
openssl version

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.查看宿主机时间

1
date

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