我正在尝试在我的 apache 服务器上的 nginx 和 php 文件上提供所有静态内容。
服务器 { 监听 80;
root /var/www/tb/;
index index.php index.html index.htm;
server_name 37.*;
location / {
try_files $uri $uri/ /index.php @forward;
#limit_req zone=one burst=1 nodelay;
}
location @forward {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host $host;
proxy_pass http://myip
}
不幸的是,当我导航到我的网站的网址时,显示的是目录索引而不是 index.php(如果我禁用自动列表,则显示 403。
如果我在 URL 后面附加http://我的网址/index它确实有效。但是http://我的网址才不是。
答案1
该指令:
try_files $uri $uri/ /index.php @forward;
将要:
- 检查 URL 是否为文件,如果是,则提供该文件
- 检查 URL 是否为目录,如果是,则提供目录索引 (
index.php index.html index.htm
) - 检查文件是否
/var/www/tb/index.php
存在,如果存在则使用 - 最后,代理远程服务器
步骤 2 和 3 不需要,因此只需将其删除。这样,如果请求准确映射到文件,则提供该请求,否则,请求将由位置@forward
块处理。
因此,基于问题的完整配置是:
root /var/www/tb/;
server_name 37.*;
location / {
try_files $uri @forward;
}
location @forward {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host $host;
proxy_pass http://myip
}
index
请注意,由于该指令不会被使用,因此不需要定义它。