Nginx 子域:重定向 Let's Encrypt 的 /.well-known 路径

Jul*_*els 5 subdomain redirect nginx meteor lets-encrypt

我有一个运行两个子域的 Nginx 服务器。其中一个使用 proxy_pass 将所有内容重定向到 Meteor 应用程序,另一个子域仅使用 Laravel,但位于与普通域不同的目录中。

\n\n

因此,当我开始时./letsencrypt-auto,我收到两个子域的以下错误消息:

\n\n
Failed authorization procedure. subdomain.mydomain.com (http-01): urn:acme:error:unauthorized ::\nThe client lacks sufficient authorization :: Invalid response from http://subdomain.mydomain.com/.well-known/acme-challenge/xyzxyzxy_xzyzxyxyyx_xyzyxzyxz: "<html>\n<head><title>404 Not Found</title></head>\n<body bgcolor="white">\n<center><h1>404 Not Found</h1></center>\n
Run Code Online (Sandbox Code Playgroud)\n\n

我对此的解释是,它不起作用,因为我的 Laravel-Subdomain 不在,/var/www/domain.com/html但在/var/www/laravel/html,而我的 Meteor-Application 在其他地方,而 ngnix 只是进行代理传递。

\n\n

所以我的问题是:我可以将/.well-known/acme-challenge两个子域重定向到真正的 /.well-known ,这样 LetsEncrypt-Auto 就不会抛出此错误吗?

\n\n
\n\n

更多信息:

\n\n

我试过了

\n\n
location \'/.well-known/acme-challenge\' {\n    default_type "text/plain";\n    root /tmp/letsencrypt-auto;\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

但它没有用...

\n\n

我的 Meteor 子域的配置:

\n\n
server {\n        listen 80;\n        listen [::]:80;\n\n        # SSL configuration\n        listen 443 ssl;\n        listen [::]:443 ssl;\n\n        ssl_certificate /etc/letsencrypt/live/domain.com/fullchain.pem;\n        ssl_certificate_key /etc/letsencrypt/live/domain.com/privkey.pem;\n\n        [\xe2\x80\xa6] SSL stuff [\xe2\x80\xa6]\n\n\n        server_name meteor.domain.com;\n\n        location / {\n        proxy_pass http://localhost:3000;\n        proxy_http_version 1.1;\n        proxy_set_header Upgrade $http_upgrade;\n        proxy_set_header Connection \'upgrade\';\n        proxy_set_header X-Forwarded-For $remote_addr;\n        }\n\n        location ~ /.well-known {\n                allow all;\n        }\n\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

我的 Laravel 子域的配置:

\n\n
server {\n        listen 80;\n        server_name laravel.domain.com;\n\n        listen 443 ssl;\n        listen [::]:443 ssl;\n\n        ssl_certificate /etc/letsencrypt/live/domain.com/fullchain.pem;\n        ssl_certificate_key /etc/letsencrypt/live/domain.com/privkey.pem;\n\n        [\xe2\x80\xa6] SSL stuff [\xe2\x80\xa6]\n\n        root /var/www/laravel/html;\n\n\n        location / {\n                try_files $uri $uri/ /index.php$is_args$args;\n        }\n\n    location ~ /.well-known {\n                allow all;\n        }\n\n    location ~ \\.(hh|php)$ {\n        fastcgi_keep_conn on;\n        fastcgi_pass   127.0.0.1:9000;\n        fastcgi_index  index.php;\n        fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;\n        include        fastcgi_params;\n    }\n}    \n
Run Code Online (Sandbox Code Playgroud)\n

Jul*_*els 3

好的,感谢理查德·史密斯的提示,我解决了这个问题:

我将其保留在domain.com-Part 的Config-Part 中,如教程中所述。

location / {
    try_files $uri $uri/ =404;
}
Run Code Online (Sandbox Code Playgroud)

但将其放入 subdomain.domain.com 的配置部分中:

location /.well-known/ {
    root /var/www/domain.com/html;
}
Run Code Online (Sandbox Code Playgroud)

它的作用是处理对subdomain.domain.com/.well-known/[anything]as 的任何请求domain.com/.well-known/[anything],因此不会出现 LetsEncrypt-Auto 的错误。