
当nginx运行在宿主机上,而php-fpm运行在docker容器内部时,首要解决的问题是nginx如何找到并连接到php-fpm服务。docker通过其网络层为容器提供了隔离的环境。为了让宿主机上的nginx能够访问容器内的php-fpm,通常有两种主要方法:
本教程将主要采用端口映射的方式进行配置,因为它更具通用性和稳定性。
首先,确保您的php-fpm容器已正确运行,并监听了FastCGI协议的端口(通常是9000)。同时,为了让php-fpm能够访问到您的PHP应用代码,需要将宿主机上的应用代码目录挂载到容器内部。
以下是一个使用bitnami/php-fpm镜像的示例:
docker run -d \ --name my-php-fpm \ -p 9000:9000 \ -v /path/to/your/app:/app \ # 将宿主机上的应用代码目录挂载到容器内的/app bitnami/php-fpm:latest
说明:
立即学习“PHP免费学习笔记(深入)”;
运行此命令后,php-fpm服务将在Docker容器内启动,并通过宿主机的9000端口对外提供服务。
接下来,我们需要在宿主机上的Nginx中配置FastCGI代理,将PHP请求转发给Docker容器内的php-fpm。
server {
listen 80;
server_name your_domain.com; # 替换为您的域名或IP地址
root /path/to/your/app; # 替换为宿主机上PHP应用代码的根目录
# 错误日志和访问日志路径
error_log /var/log/nginx/your_domain.error.log;
access_log /var/log/nginx/your_domain.access.log;
index index.php index.html index.htm; # 默认索引文件
location / {
# 尝试直接提供文件,如果不存在则回退到index.php
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php(/|$) {
# FastCGI代理到php-fpm服务
fastcgi_pass 127.0.0.1:9000; # 或 localhost:9000,取决于您的系统配置
# 如果宿主机与容器在同一网络且没有端口映射,可能需要使用Docker桥接IP,例如:
# fastcgi_pass 172.17.0.1:9000;
fastcgi_split_path_info ^(.+\.php)(/.*)$;
include fastcgi_params; # 包含FastCGI标准参数
# 确保SCRIPT_FILENAME正确指向PHP脚本在容器内的路径
# $document_root 对应 Nginx 的 root 指令,即宿主机上的 /path/to/your/app
# 容器内通过卷挂载,此路径在容器内也存在,如 /app
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param HTTPS off; # 根据您的HTTPS配置调整
}
# 可选:禁止访问某些敏感文件
location ~ /\.ht {
deny all;
}
}启动php-fpm容器: 按照上述docker run命令启动您的php-fpm容器。
配置Nginx: 将上述Nginx配置保存到您的Nginx配置文件中(例如/etc/nginx/conf.d/your_app.conf)。
检查Nginx配置: 运行sudo nginx -t检查Nginx配置是否有语法错误。
重载Nginx: 如果配置无误,运行sudo systemctl reload nginx或sudo service nginx reload重载Nginx服务。
创建测试文件: 在宿主机上您的应用代码根目录(例如/path/to/your/app)中创建一个index.php文件,内容如下:
<?php phpinfo(); ?>
访问测试: 在浏览器中访问http://your_domain.com(或您配置的IP地址),如果一切配置正确,您应该能看到phpinfo页面。
通过本教程,您应该已经掌握了在宿主机Nginx中代理Docker容器内php-fpm的核心方法。关键在于正确配置Nginx的FastCGI代理指令,并确保宿主机Nginx与Docker容器php-fpm之间的网络连通性以及文件路径的映射一致性。遵循这些步骤,您将能够高效地利用Docker容器的隔离性来运行php-fpm,同时保持Nginx在宿主机上的灵活性。
以上就是宿主机Nginx代理Docker容器内php-fpm的配置指南的详细内容,更多请关注php中文网其它相关文章!
PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号