原本1台服务器上只有1个网站,请求由nginx代理然后转发到web app实际运行的非80端口上。现在多了1个网站,仍然想要部署在同一服务器上。
怎么做?
-》 Nginx多域名共享80端口配置:
1)2个网站,分别2个域名(可以用一级域名衍生出无数二级域名……),DNS解析到同一服务器IP上 -》 添加阿里云DNS解析A记录。
(这里,顺道给2个二级域名分别申请了免费证书,然后上了https)
[nginx配置]
配置入口:
其中是一些通用配置(比如access日志在哪里),还包含 虚拟主机的默认位置:
就是要创建虚拟主机,于是在/etc/nginx/conf.d/下新建2个.conf文件:
之前只有1个网站时,配置位于/etc/nginx/sites-available/default,现在挪过来,在server_name处修改成二级域名就行。
以pin.conf为例 :
以上把所有发送到pin.xxx.top的http请求重定向到https。
以上是把所有发送到pin.xxx.top开头的https请求,转发到localhost:5000处理。这是一个基于flask的网站,默认运行在5000端口。
[解决https连接不安全的问题]
nginx配置正确情况下,中途出现访问网站https不安全,或者直接降成http请求。
-》 原因是证书能够证明的域名主机头和请求的主机头不一致。(例如,nginx配置和实际访问的都是blog.xxx.top,但对应证书能够证明的是www.xxx.top,这种情况下证书是无效的,略隐蔽吧……)
[关于nginx static和media资源的问题]
1)Django网站在上线时,nginx上要做这样的配置,否则资源可能找不到404:
2)然而flask没有做以上配置,static资源也能够成功加载(暂时还没有media)
3)测试后的现象:nginx上不配static也能成功找到资源,flask和Django都是,但media必须要配置。(最好还是配一下保险)
用Django自带server+nginx无指定static和media目录: static可以正常打开(只要直接是static),media不行……
ssl证书中的域名要和访问的一致,否则认为证书不合格还是http
参考: