我正在使用Nginx作为Web服务器与LetsEncrypt一起加密我的连接。 我的主页有多个子域名,例如www.domain.com,mail.domain.com等。 现在我想将所有“/.well-known”连接重定向到一个特殊的根文件夹。
我认为我有正确的配置,但结果不是我想要的。
这是我的配置:
default.vhost
#=============================================
#== Server
#==============================================
server {
#=============================================
#== General
#=============================================
# Port
listen 80;
# Server name
#server_name _;
#=============================================
#== Locations
#=============================================
location /.well-known {
#default_type "text/plain";
root /var/wwww/LetsEncrypt;
}
location / {
return 301 https://www.example.com$request_uri;
}
}
server {
#=============================================
#== General
#=============================================
# Port
listen 443 ssl;
# Server name
#server_name _;
#=============================================
#== Locations
#=============================================
location / {
return 301 https://www.example.com$request_uri;
}
}
www.domain.com
#=============================================
#== HTTP-Server
#=============================================
server {
#=============================================
#== General
#=============================================
# Port
listen 443 ssl default_server;
# Server name
server_name www.example.com;
# Root folder
root /var/www/www.example.com/web/;
# Order of index files
index index.php index.html index.htm;
#=============================================
#== Includes
#=============================================
# SSL configuration
include /etc/nginx/ssl.conf;
# PHP configuration
include /etc/nginx/php.conf;
#=============================================
#== Locations
#=============================================
location /.well-known/acme-challenge {
#default_type "text/plain";
root /var/wwww/LetsEncrypt;
}
location / {
try_files $uri $uri/ =404;
}
location ~ /\.ht {
deny all;
}
}
mail.domain.com
#=============================================
#== HTTP-Server
#=============================================
server {
#=============================================
#== General
#=============================================
# Port
listen 443 ssl;
# Server name
server_name mail.example.com;
# Root folder
root /var/www/mail.example.com/web/;
# Order of index files
index index.php index.html index.htm;
#=============================================
#== Includes
#=============================================
# SSL configuration
include /etc/nginx/ssl.conf;
# PHP configuration
include /etc/nginx/php.conf;
#=============================================
#== Locations
#=============================================
location / {
try_files $uri $uri/ =404;
}
location ~ /\.ht {
deny all;
}
}
那么,会发生什么.. mail.domain.com和www.domain.com运作良好。 问题是.well已知的规则。 Nginx忽略它,我总是被重定向,而不是从“/ var / www / LetsEncrypt”获取文件。
我认为default_server是问题,但是在将它移动到“default.vhost”之后没有任何工作(总是404 ..听起来有点奇怪......)。
我希望你们能帮助我:(
亲切的, 安德烈亚斯
答案 0 :(得分:0)
首先,您需要使用nginx 'location begins with' modifier ^~
来捕获以指定目录开头的所有请求。
location ^~ /.well-known/acme-challenge {
其次你有/var/wwww/LetsEncrypt
(4个w)而不是/var/www/LetsEncrypt
。
您的位置区块应如下所示:
location ^~ /.well-known/acme-challenge {
#default_type "text/plain";
root /var/www/LetsEncrypt;
}
还要注意alias和root之间的区别,因为root会将uri附加到路径上,例如:
alias /var/www/LetsEncrypt; # Will serve files from /var/www/LetsEncrypt
root /var/www/LetsEncrypt; # Will serve files from /var/www/LetsEncrypt/.well-known/acme-challenge
如果您尝试提供特定目录,这可能会让您失望。