首页 > 解决方案 > 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;
}

标签: nginxnginx-config

解决方案


您在第二个 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 级域设置一个新块并为每个域获取证书,或按照指南获取通配符证书。


推荐阅读