
在开始配置之前,明确我们的部署架构至关重要。本教程的目标是:
首先,我们需要确保php-fpm容器正确运行并暴露其FastCGI端口。通常,php-fpm服务监听在9000端口。
我们可以使用如bitnami/php-fpm等现成的php-fpm镜像。关键在于通过Docker的端口映射功能,将容器内部的9000端口映射到宿主机的一个可用端口。
示例Docker运行命令:
docker run -d \ --name my-php-fpm \ -p 9000:9000 \ -v /path/to/your/php/app:/app \ bitnami/php-fpm:latest
命令解析:
立即学习“PHP免费学习笔记(深入)”;
运行此命令后,php-fpm服务将在Docker容器中启动,并通过宿主机的9000端口对外提供服务。
接下来,我们需要配置宿主机上的Nginx,使其能够将PHP请求转发给运行在Docker容器内的php-fpm服务。这涉及到Nginx的FastCGI代理模块。
创建一个新的Nginx站点配置文件(例如/etc/nginx/conf.d/your_app.conf)或修改现有的配置文件。
示例Nginx配置:
server {
listen 80;
server_name localhost your.domain.com; # 替换为你的域名或IP
# 你的PHP应用代码在宿主机上的根目录
# 确保这个路径与Docker挂载的宿主机路径一致,例如 /path/to/your/php/app
root /path/to/your/php/app;
index index.php index.html index.htm;
error_log /var/log/nginx/your_app.error.log;
access_log /var/log/nginx/your_app.access.log;
# 尝试直接访问文件,如果文件不存在,则重写到index.php
location / {
try_files $uri $uri/ /index.php?$query_string;
}
# 处理所有以.php结尾的请求
location ~ \.php$ {
# 确保文件存在,否则返回404
try_files $uri =404;
# 将请求转发给php-fpm服务
# 如果php-fpm容器映射到宿主机9000端口,则使用localhost:9000
# 如果php-fpm容器运行在不同IP的宿主机上,则替换为相应IP
fastcgi_pass 127.0.0.1:9000;
# 匹配请求URI,提取脚本名称和路径信息
fastcgi_split_path_info ^(.+\.php)(/.+)$;
# 引入FastCGI参数,通常位于/etc/nginx/fastcgi_params或fastcgi.conf
include fastcgi_params;
# 设置SCRIPT_FILENAME参数,告知php-fpm要执行的脚本路径
# $document_root是Nginx配置中的root指令定义的路径
# $fastcgi_script_name是fastcgi_split_path_info提取出的脚本名称
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
# 可选:设置HTTPS状态,如果Nginx处理HTTPS,此处可设为on
fastcgi_param HTTPS off;
}
# 阻止访问隐藏文件和目录
location ~ /\. {
deny all;
}
}配置详解:
保存Nginx配置文件后,需要检查配置语法并重载Nginx服务:
sudo nginx -t # 检查Nginx配置语法 sudo systemctl reload nginx # 重载Nginx服务
通过上述步骤,你已经成功配置了宿主机上的Nginx来代理运行在Docker容器内的php-fpm服务。这种部署方式结合了Docker的隔离性和宿主机Nginx的灵活性,使得PHP应用的部署和管理更加高效。关键在于正确配置Docker的端口映射、Nginx的fastcgi_pass指令以及确保Nginx root路径与Docker挂载路径的一致性。在遇到问题时,详细检查Nginx和php-fpm的日志将是快速定位和解决问题的有效方法。
以上就是宿主机Nginx代理Docker容器内php-fpm服务的配置指南的详细内容,更多请关注php中文网其它相关文章!
PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号