如何集成Nginx Proxy Manager与PHP应用实现共存运行?
解决Nginx Proxy Manager与原有PHP应用共存的方案
针对你遇到的NPM和原生Nginx端口冲突、无法同时运行PHP应用的问题,提供几个实用的解决思路:
方案一:将原生Nginx作为NPM的后端服务
这个方案保留你原有的Nginx配置,让NPM统一接管80/443端口,反向代理PHP应用请求到原生Nginx:
- 修改原生Nginx的监听端口:
打开主配置文件/etc/nginx/nginx.conf(或对应站点配置文件),将listen 80;和listen 443 ssl;改为非80/443的端口,比如listen 8080;和listen 4433 ssl;。 - 重启原生Nginx:
执行命令sudo systemctl restart nginx,验证PHP应用可通过http://localhost:8080/phpmyadmin正常访问。 - 在NPM中添加代理主机:
- 进入NPM面板,点击"Add Proxy Host"
- 填写你的PHP应用域名(如
phpmyadmin.yourdomain.com) - 目标URL设置为
http://localhost:8080(对应原生Nginx的新监听端口) - 保存配置后,即可通过原域名访问PHP应用,NPM会自动转发请求到原生Nginx。
方案二:直接在NPM中配置PHP处理
放弃原生Nginx,让NPM直接处理PHP请求,需要依赖php-fpm:
- 安装php-fpm(以Ubuntu为例):
执行sudo apt install php-fpm,根据你的PHP版本调整命令(如php8.2-fpm)。 - 在NPM中配置PHP应用:
- 添加新的"Proxy Host",填写域名后,切换到"Files"选项卡,设置"Website Root"为PHP应用的文件路径(如
/var/www/phpmyadmin)。 - 切换到"Advanced"选项卡,添加以下Nginx配置片段:
location ~ \.php$ { fastcgi_pass unix:/run/php/php8.2-fpm.sock; # 路径根据PHP版本调整 fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; }
- 添加新的"Proxy Host",填写域名后,切换到"Files"选项卡,设置"Website Root"为PHP应用的文件路径(如
- 保存配置后,NPM会直接解析PHP文件,无需依赖原生Nginx。
方案三:端口隔离(适合Docker环境)
如果你的NPM是用Docker部署的,可以通过网络配置实现端口隔离:
- 让原生Nginx监听主机的非80/443端口,NPM容器映射80/443到主机端口;
- 在NPM中配置代理主机时,目标URL填写主机的内网IP加原生Nginx端口(如
http://192.168.1.100:8080),确保容器能访问主机网络。
注意事项
- 调整端口后,确保防火墙开放对应端口(如8080);
- 配置php-fpm时,需保证NPM的运行用户(通常是
nginx)有权限访问PHP应用目录和php-fpm套接字; - 若使用SSL,在NPM中统一配置证书即可,无需在原生Nginx中重复配置。
内容的提问来源于stack exchange,提问作者Pete L
相关产品推荐
相关产品推荐

