我在配置 nginx 以在三个站点之间共享文件时遇到了一些问题。我知道我可以通过简单地为每个站点提供自己的文件副本或使用符号链接来解决这个问题。根据 nginx 文档,这应该相对容易配置。
所有三个网站(site1.com,site2.net,site3.net)都应提供相同的 robots.txt,该文件位于 /webdata/common/robots.txt。
所有网站还共享 404 和 500 系列错误页面,这些页面也位于 /webdata/common。
最后,所有站点还共享一个目录树 /.dir1/dir2/,因此文件 www.site1.com/.dir1/dir2/file、www.site2.net/.dir1/dir2/file、www.site3.net/.dir1/dir2/file 都指向 /webdata/type/.dir1/dir2/file
错误页面运行正常,但是 robots.txt 和所有 /.dir1/dir2/files 都会生成 404 错误。
我已经检查并重新检查了 nginx 是否有权读取 /webdata 目录下的所有文件。
有人能指出我做错什么吗?
任何帮助都将不胜感激。
/etc/nginx/nginx.conf
用户 nginx nginx; 工作进程 10; 错误日志/var/log/nginx/error_log 信息; pid /var/run/nginx.pid; worker_rlimit_nofile 8192; 事件 { 工作者连接1024; 使用epoll; } http { 包括/etc/nginx/mime.types; 索引 索引.html; 默认类型应用程序/八位字节流; log_format 主要 '$remote_addr-$remote_user[$time_local]' '“$request”$status $bytes_sent' '“$http_referer”“$http_user_agent”' '"$gzip_ratio"'; 访问日志 /var/log/nginx/access.log 主要; 客户端_头_超时1分钟; 客户端主体超时1分钟; 发送超时1分钟; 连接池大小256; 客户端头缓冲区大小1k; 大型客户端头缓冲区 4 2k; 请求池大小为4k; 开启 gzip; gzip_最小长度 1100; gzip缓冲区4 8k; gzip_类型文本/纯文本; 输出缓冲区132k; 推迟输出 1460; 发送文件; tcp_nopush 开启; tcp_nodelay开启; 保持活动超时 75 20; 忽略无效标头; 索引 索引.html; 服务器 { 听 123.123.123.123; 听80; 服务器名称 www.site1.com site1.com; 访问日志 /var/log/nginx/site1.com.access_log 主要; 错误日志 /var/log/nginx/site1.com.error_log 信息; 根/webdata/brivawn.com/www/; 位置 =/robots.txt { 根目录/webdata/common/; 内部的; } 位置/.dir1/dir2/ { 根/webdata/type/.dir1/dir2/; 内部的; } 错误页面 404 /error_404.html; 位置 = /error_404.html { 根目录/webdata/common/; } 错误页面 500 501 502 503 504 505 506 507 508 509 510 511 520 522 598 599 /error_50x.html; 位置 = /error_50x.html { 根目录/webdata/common/; } } 服务器 { 听 123.123.123.123; 听80; 服务器名称 www.site2.net site2.net; 访问日志 /var/log/nginx/site2.net.access_log 主要; 错误日志 /var/log/nginx/site2.net.error_log 信息; 根目录/webdata/site2/www/; 位置 =/robots.txt { 根目录/webdata/common/; 内部的; } 位置/.dir1/dir2/ { 根/webdata/type/.dir1/dir2/; 内部的; } 错误页面 404 /error_404.html; 位置 = /error_404.html { 根目录/webdata/common/; } 错误页面 500 501 502 503 504 505 506 507 508 509 510 511 520 522 598 599 /error_50x.html; 位置 = /error_50x.html { 根目录/webdata/common/; } } 服务器 { 听 123.123.123.123; 听80; 服务器名称 www.site3.net site3.net; 访问日志 /var/log/nginx/site3.net.access_log 主要; 错误日志 /var/log/nginx/site3.net.error_log 信息; 根目录/webdata/site3/www/; 位置 =/robots.txt { 根目录/webdata/common/; 内部的; } 位置/.dir1/dir2/ { 根/webdata/type/.dir1/dir2/; 内部的; } 错误页面 404 /error_404.html; 位置 = /error_404.html { 根目录/webdata/common/; } 错误页面 500 501 502 503 504 505 506 507 508 509 510 511 520 522 598 599 /error_50x.html; 位置 = /error_50x.html { 根目录/webdata/common/; } } }
nginx -V
nginx 版本:nginx/1.8.0 使用 OpenSSL 1.0.2d 构建,2015 年 7 月 9 日 已启用 TLS SNI 支持 配置参数:--prefix = / usr --conf-path = /etc/nginx/nginx.conf --error-log-path = /var/log/nginx/error_log --pid-path = /run/nginx.pid --lock-path = /run/lock/nginx.lock --with-cc-opt = -I / usr/include --with-ld-opt = -L / usr/lib64 --http-log-path = /var/log/nginx/access_log --http-client-body-temp-path = /var/lib/nginx/tmp/client --http-proxy-temp-path = /var/lib/nginx/tmp/proxy --http-fastcgi-temp-path = /var/lib/nginx/tmp/fastcgi --http-scgi-temp-path = /var/lib/nginx/tmp/scgi --http-uwsgi-temp-path = /var/lib/nginx/tmp/uwsgi --带有-ipv6 --带有-pcre --带有-http_realip_module --带有-http_ssl_module --不带-mail_imap_module --不带-mail_pop3_module --不带-mail_smtp_module --user=nginx --group=nginx
答案1
你有两个不同的问题:
第一的:
location =/robots.txt {
root /webdata/common/;
internal;
}
这只是打字错误。应该是location = /robots.txt {
第二:
location /.dir1/dir2/ {
root /webdata/type/.dir1/dir2/;
internal;
}
请记住,root
指定文档根目录;URL 路径附加到该根目录。因此,这将尝试访问/webdata/type/.dir1/dir2/.dir1/dir2/
,而这并不是您想要的。您可以更正root
(如果目录结构匹配,则首选)或使用alias
。