在Nginx中直接返回验证文件(比如用于域名所有权验证的example.txt
或file.json
等)是一个常见的需求,通常用于SSL证书验证、搜索引擎验证等场景。以下是几种实现方式:
location
匹配特定文件server {
listen 80;
server_name example.com;
# 直接返回验证文件
location = /.well-known/pki-validation/file.txt {
root /path/to/validation/files;
default_type text/plain;
}
}
location =
确保精确匹配文件路径。root
指定文件所在的目录(如/var/www/validation
)。default_type
显式设置Content-Type(避免浏览器下载txt文件)。alias
指定文件路径如果文件不在默认的root
目录下,可以用alias
:
location /verify-file.txt {
alias /custom/path/verify-file.txt;
default_type text/plain;
}
alias
路径必须包含文件名,而root
只需要目录。如果文件内容简单且固定,可以直接用return
:
location /robots.txt {
return 200 "User-agent: *\nDisallow: /";
}
适用于动态生成的验证文件名(如Let's Encrypt的ACME验证):
location ^~ /.well-known/acme-challenge/ {
root /var/www/letsencrypt;
default_type text/plain;
}
^~
表示优先匹配该路径,避免被其他规则覆盖。www-data
或nginx
)有权限读取文件。
bash
chmod 644 /path/to/file.txt
chown nginx:nginx /path/to/file.txt
nginx
location = /verify.txt {
add_header Cache-Control "no-cache, no-store, must-revalidate";
root /path/to/files;
}
nginx
location = /verify.txt {
access_log off;
root /path/to/files;
}
bash
sudo nginx -t && sudo systemctl reload nginx
bash
curl http://example.com/verify-file.txt
root
或alias
配置正确。default_type
显式设置Content-Type。通过以上方法,你可以灵活地实现Nginx直接返回验证文件的需求。