前言
其实,大家应该是没有这个需求的,在一台服务器上配置多个 SSL,毕竟都是一个服务器一个项目
只因菜狗子我,只有一个服务器,多个网页想都弄上 https
访问
前提准备
需要根据狗哥的文章对项目进行反向代理: 在一台服务器上用一个域名部署多个项目
在进行端口映射时,需将容器的443端口也映射到别的端口
准备完成后,我们去修改 django 项目中 nginx 的配置
在参考该篇文章后: 链接在这里 ,需在宿主机内的 nginx 也进行 ssl 配置
配置内容如下:
server {
listen 443 ssl;
server_name 你的域名;
ssl_certificate 你的证书;
ssl_certificate_key 你的证书;
ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
charset utf-8;
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
client_max_body_size 10M;
location / {
proxy_pass https://127.0.0.1:容器443映射的端口号;
}
}
配置后访问自己的 django 项目,应该会出现如下界面:
这时只需按页面提示将 “127.0.0.1” 加入 setting.py 文件中的 ALLOWED_HOSTS 即可
第二个项目
代码等环境准备完成后,进行 nginx 配置,内容如下:
user sabar;
worker_processes auto;
pid /run/nginx.pid;
include /etc/nginx/modules-enabled/*.conf;
events {
worker_connections 768;
# multi_accept on;
}
http {
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
include /etc/nginx/mime.types;
default_type application/octet-stream;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3; # Dropping SSLv3, ref: POODLE
ssl_prefer_server_ciphers on;
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
gzip on;
# include /etc/nginx/conf.d/*.conf;
# include /etc/nginx/sites-enabled/*;
server{
listen 80;
root /home/sabar/KOF/KOF/templates/; #你的网页 html 存放地址
index index.html; #你的 html 文件夹名字
location /static{
alias /home/sabar/KOF/KOF/static; #你的 html 的静态资源存放地址
}
}
}
我的第二个项目没有用框架,直接在服务器丢的文件hh
- 这里没有写
server_name
是因为server_name
是为了限制访问地址,我们的访问都是来自于宿主机,所以写不写都可以 - 这里也不需要写转发了,宿主机发送请求到容器后,容器应该返回真正的内容了
- 如果配置完文件,访问页面一直显示 nginx 默认欢迎界面的话,需将
nginx.conf
文件中的include /etc/nginx/conf.d/*.conf;
以及include /etc/nginx/sites-enabled/*;
这两句话注释掉,如上面所写;这两句话会将conf.d
和sites-enabled
文件下的默认配置包含进来 - 如果有静态资源的话,记得将资源路径写上,不然会出现无法访问都资源的问题
写好后,我们再去宿主机中配置 nginx 文件,需要再之前的内容加上第二个项目的 ssl,内容如下:
server {
listen 443 ssl;
server_name 你的域名;
ssl_certificate 你的证书;
ssl_certificate_key 你的证书;
ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
charset utf-8;
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
client_max_body_size 10M;
location / {
proxy_pass http://127.0.0.1:容器80端口映射的端口号;
}
}
- 这里与之前不同的就是,转发时的端口变成了容器内80端口映射的端口号;用户和宿主机之间是
https
密文传输的,宿主机再转发到容器内时,明文传输也可以 - 至于改成容器内443端口映射的端口号,访问页面会挂的问题,不是很清楚,猜测是因为容器内没有写 ssl 相关配置hh
在文章的最后感谢巨巨朋友 @1v7w,最后的一些问题是他帮我解决的,同时也感谢狗哥~ @大菜狗
第一次写分享,如果写的不是很好,请原谅我这个菜狗子~
完结撒花~