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的配置。

如:www.test.com:8090,自动跳转到 https://www.test.com:8090

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容器[注意映射8090端口,或其他非80 非443端口]。80和443端口也可以不映射,本文中用不到。

1
2
3
4
5
6
7
8
9
10
11
docker run \
--name nginx \
-p 443:443 -p 80:80 -p 8090:8090 \
-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 、4、5、6、7步骤(网上有很多教程说需要安装ssl模块,在这里无须此操作)

其中 第4部很关键;第6部涉及非443端口https下的负载均衡配置。

注意:该配置仅适用于非http 80端口转非https 443端口。如:8090端口http跳转8090端口https。

注:301 307 308状态码:

缓存(永久重定向)不缓存(临时重定向)
转GET301302、303
方法保持308307
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
#如有需要 gzip也放开即可
#gzip on;

#上传文件大小限制
client_max_body_size 1024M;

ignore_invalid_headers on;
underscores_in_headers on;
merge_slashes on;

##负载均衡
upstream upstream_server{
##java服务
server 192.168.253.2:8889;
}

server {
##1.监听8090端口
listen 8090 ssl;
server_name www.test.com;

##2.让浏览器自动升级请求为https
##这一句可以让浏览器加载http的资源。但是有的浏览器不支持,比如IE
add_header 'Content-Security-Policy' 'upgrade-insecure-requests';

##3.证书配置
ssl_certificate /etc/nginx/ssl/key2/nginx.crt;
ssl_certificate_key /etc/nginx/ssl/key2/nginx.key;

ssl_session_timeout 60m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;

##4.强转https
error_page 497 301 https://$http_host$request_uri;
##永久重定向,方法保持(如有需要可将307改为308。307/308状态码不会将POST的请求重定向到GET请求上)
##error_page 497 301 =307 https://$host:$server_port$request_uri;

##5.代理地址
location / {
root html;
index index.html index.htm;

##6.没有这一行 负载均衡出错。注意:非443端口https下是$http_host,443端口下是$host。
proxy_set_header Host $http_host;

##7.负载均衡 反向代理
proxy_pass http://upstream_server;
proxy_set_header Connection close;
proxy_connect_timeout 100ms;
expires 30d;
}
}

生成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,网页会自动刷新,就可以访问了!

参考链接

重定向状态码

https://www.cnblogs.com/OpenCoder/p/16265950.html

非443端口http跳转https

https://blog.csdn.net/sixisixsix/article/details/122604405

https://blog.csdn.net/qq_30665009/article/details/124464699

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