gpt4 book ai didi

php - NGINX无法访问应用程序文件时的NGINX配置,以及php-fpm和docker

转载 作者:行者123 更新时间:2023-12-02 19:17:43 27 4
gpt4 key购买 nike

因此,我的docker设置如下:我有一个可以接受HTTP请求的Nginx容器,还有另一个包含php-fpm和应用程序代码的容器(我的自定义容器)。应用程序代码不在主机上,仅在Web容器中。

我想将Nginx配置为代理,以获取请求并将其路由到php-fpm。

我的nginx确认如下(我删除了一些不重要的部分):

upstream phpserver {
server web:9000;
}

server {
listen 443 ssl http2;
server_name app;
root /app/web;

ssl_certificate /ssl.crt;
ssl_certificate_key /ssl.key;

location ~ ^/index\.php(/|$) {
fastcgi_pass phpserver;
fastcgi_split_path_info ^(.+\.php)(/.*)$;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
fastcgi_param DOCUMENT_ROOT $realpath_root;
fastcgi_read_timeout 160;

internal;
http2_push_preload on;
}
}

和我的docker配置(再次,我删除了一些不重要的部分)
nginx:
ports:
- 443:443/tcp
- 80:80/tcp
image: nginx
links:
- web:web

web:
image: custom_image
container_name: web

使用此配置,我得到以下Nginx错误:“open()” / app / web“失败(2:没有这样的文件或目录)”,因为Nginx无法访问该文件夹(该文件夹位于Web容器中, php-fpm是)。

有什么方法可以配置Nginx来路由HTTP请求,即使它无法访问应用程序代码也是如此?

我了解解决此问题的一种方法是将应用程序代码安装到Nginx容器,但我想尽可能避免这种情况。这样做的原因是,在群集模式下,如果两个容器不共享主机,则无法使用。

最佳答案

我设法解决了这个问题,所以我在下面为有类似问题的人发布了自己的解决方案。
解决方案是在nginx配置中使用'alias'指令,而不使用'root'指令(我删除了一些在这里不重要的部分):

upstream phpserver {
server web:9000;
}

server {
listen 443 http2;
ssl on;
server_name app;

ssl_certificate /ssl.crt;
ssl_certificate_key /ssl.key;

location ~ ^/index\.php(/|$) {
alias /app/web;

fastcgi_pass phpserver;
fastcgi_split_path_info ^(.+\.php)(/.*)$;
fastcgi_index index.php;
include fastcgi_params;

fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name$fastcgi_script_name;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;

internal;
http2_push_preload on;
}
}
现在,请求已正确路由到端口9000上的phpserver,并由php fpm处理。 php fpm通过查看“alias”指令来知道要执行哪个脚本。
现在的问题是如何提供静态文件。一种解决方案是也通过php fpm为它们提供服务,但是根据我在网上阅读的内容,不建议这样做,因为开销会更大。因此,我的解决方案是与nginx docker容器共享所有静态文件,以便ngnix可以访问它们并直接提供服务。如果有人对在这种情况下如何提供静态文件有更好的解决方案,请告诉我。
# Cache Control for Static Files
location ~* \.(jpg|jpeg|gif|png|css|js|ico|xml)$ {
#access_log on;
#log_not_found off;
expires 360d;
}

关于php - NGINX无法访问应用程序文件时的NGINX配置,以及php-fpm和docker,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62268548/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com