nginx - nginx 配置没有正确获得同一服务器上的第二个域
问题描述
设置:Ubuntu 18.04 Nginx Apache Varnish PHP Server Nginx 首先处理流量。
我有两个域指向同一个服务器。第一个域工作正常,第二个仅重定向到第一个。
我的配置有什么问题?
第一个运行良好的配置(这里 nginx 作为 varnish 和 Apache 的反向代理。)
upstream varnish {
server 127.0.0.1:6081;
}
upstream apache {
server 127.0.0.1:8080;
}
server {
if ($host = domain1.com) {
return 301 https://$host$request_uri;
} # managed by Certbot
listen 80;
listen [::]:80 default_server;
server_name domain1.com;
include inc/acme-challenge.conf;
location / {
return 301 https://domain1.com$request_uri;
}
}
server {
listen 443 ssl http2 default_server;
listen [::]:443 ssl http2;
#client_max_body_size 120M;
server_name domain1.com;
location /wp-content/uploads {
alias /var/www/website/wp-content/uploads;
include inc/gzip.conf;
include inc/browser-cache.conf;
}
error_page 502 /502.html;
location = /502.html {
alias /var/www/website/502.html;
}
location / {
proxy_pass http://varnish;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto https;
proxy_set_header X-Forwarded-Port 443;
proxy_set_header Host $host;
}
location ^~ /phpmyadmin {
allow 45.77.141.32; #qundg
allow 87.191.170.222; #qundg
deny all;
proxy_pass http://varnish;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto https;
proxy_set_header X-Forwarded-Port 443;
proxy_set_header Host $host;
}
ssl_certificate /etc/letsencrypt/live/domain1.com/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/domain1.com/privkey.pem; # managed by Certbot
}
这里是第二个配置(这个不起作用)域应该只由没有 Apache 或 Varnish 服务的 nginx 管理。
server {
listen 80;
listen [::]:80;
server_name domain2.com *.domain2.com;
root /var/www/domain2.com;
index index.html;
location / {
try_files $uri $uri/ =404;
}
}
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name domain2.com *.domain2.com;
root /var/www/domain2.com;
index index.html;
location / {
try_files $uri $uri/ =404;
}
}
这是默认配置
server {
server_name _;
listen *:80 default_server deferred;
error_log /var/log/nginx/default_server_error.log;
return 444;
}
解决方案
您在第二个 DNS 名称中使用了通配符,这应该是您的证书中无法识别的内容。
要获得通配符,您可以按照此处的说明https://medium.com/@saurabh6790/generate-wildcard-ssl-certificate-using-lets-encrypt-certbot-273e432794d7
我很少有超过 1 个 DNS 指向同一个网站,并且我创建了不同的 nginx 配置文件,并申请了每个 che certbot 身份验证。我注意到当我拥有超过 1 个证书时,在同一个配置文件 broth certbot 中使用 3 级 dns (something.mysyte.com) 来覆盖证书。
在您的特定情况下,您在第二个配置中有 2 个 dns 名称,其中一个有一个通配符。如果您尝试使用通配符删除 dns 并重新安装证书,它应该可以工作。然后,您可以为每个 3 级域设置一个新块并为每个域获取证书,或按照指南获取通配符证书。
推荐阅读
- mysql - 选择 table1 中的所有行,以及 table2 中不在表 1 中的行
- c# - 不适用于嵌套子级的 AutoMapper IncludeMembers
- rstudio - 如何使用 Rcpp 在 Rstudio 中关闭 CLANG 诊断?
- angular - 如何将订阅内容传递到 CanDeactivateGuard
- c++ - 以相反的顺序打印数组 - 为什么在 C++ 中这是错误的?
- c - 如何使用strtok和指针读取txt文件并逐行逐字分割?
- mysql - #1064 - 您的 SQL 语法有错误;检查与您的 MariaDB 服务器版本相对应的手册,以获取在 '' 附近使用的正确语法
- regex - 查找正则表达式
- javascript - 是否可以使用 javascript 将字体动态更改为自定义字体?
- java - 将json数据ajax传递给Spring boot