Nginx配置Tomcat站点下WordPress子目录遇错求助
解决Nginx配置Tomcat站点下/blog PHP博客的"No input file specified"问题
我帮你梳理下问题根源和解决办法——你现在的核心问题是既没正确处理Tomcat主站的请求转发,又因为PHP脚本路径指向错误导致了"No input file specified"报错,咱们一步步来修复:
错误原因拆解
"No input file specified"本质是PHP-FPM找不到你指定的脚本文件,结合你的配置来看:
- 你把
root设为/var/www/html,但博客文件大概率不在这个主站目录里,导致$document_root$fastcgi_script_name拼接出来的路径根本不存在 - 当前配置完全没处理Tomcat主站的请求,所有非/blog的请求都会走Nginx静态文件查找,这肯定会出问题
完整解决方案
假设你的PHP博客文件实际存放在/var/www/blog目录,Tomcat运行在本地8080端口(默认Tomcat端口),请替换成下面的Nginx配置:
server { listen 80; server_name example.com; # 替换成你的实际域名或IP # 处理主站所有非/blog的请求,转发到Tomcat location / { proxy_pass http://localhost:8080; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } # 处理/blog路径的PHP博客请求 location /blog { root /var/www; # 这里是/blog的上级目录,因为$uri会包含/blog前缀 index index.php; try_files $uri $uri/ /blog/index.php?$args; # 单独处理/blog下的PHP脚本,避免和全局规则冲突 location ~ ^/blog/.+\.php$ { fastcgi_split_path_info ^(/blog/.+\.php)(/.+)$; fastcgi_pass unix:/var/run/php7.2-fpm.sock; fastcgi_index index.php; # 拼接后路径为/var/www/blog/xxx.php,PHP-FPM能正确找到文件 fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } } # 错误页面配置 error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; # 用Nginx默认错误页面目录更稳妥 } }
关键配置说明
- 主站转发规则:
location /把所有非/blog的请求转发到Tomcat,确保主站正常访问 - 博客路径修正:
location /blog的root设为/var/www,这样拼接出来的脚本路径正好对应你的博客文件目录 - 独立PHP规则:给/blog下的PHP单独配置location,避免和全局PHP规则(如果有的话)冲突,同时保证路径拆分逻辑正确
后续验证步骤
- 确保博客目录权限正确,让Nginx和PHP-FPM能访问:
chown -R www-data:www-data /var/www/blog chmod -R 755 /var/www/blog - 测试Nginx配置合法性:
nginx -t - 重启服务生效:
systemctl restart nginx systemctl restart php7.2-fpm
这样配置后,访问example.com会打开Tomcat主站,访问example.com/blog就能正常加载PHP博客了。
内容的提问来源于stack exchange,提问作者user10090131
相关产品推荐
相关产品推荐

