序
最近docker部署集群的时候遇到了一个问题。于是就踩坑了…
问题复现
那就是php和nginx不在同一个容器,却要通过nginx配置的server_name和listen来访问php项目。
之前在本地集成环境部署的时候没有考虑过这个问题,是因为只要nginx的root根目录和php的root根目录指向同一个目录,这样把项目文件放到这个目录下就可同时访问,也就不存在说是php来访问还是nginx来访问的说法。
但是在集群中也就需要考虑这个问题了。
思路
静态文件需要在 nginx 容器内,php代码放在 php-fpm 的容器内,在nginx的配置里 php 部分设置php-fpm 所在容器内php的路径就可以了。
实现
server {
listen 80;
listen [::]:80;
server_name api.com;
root /var/www/html/phalapi/api/public;
set $realdir "";
location / {
index index.html index.php index.htm;
try_files $uri $uri/ $realdir/index.php?$args;
}
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass php:9000;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
}
}