项目使用 PHP 开发,打包成镜像,部署到服务器后,接口使用都没什么问题,但是访问静态资源文件访问不了,在项目根目录下有个资源文件目录 resource
,我的访问地址例如:xxx.com/resource/images/xxxx.png
我在本地开发环境是可以访问成功资源文件,本地也是 Docker 运行的,只是是使用 Docker-compose 编排了 PHP 容器和 Nginx 容器。
服务器上是直接运行了 PHP 容器,暴露 9000 端口。
求大神们看看该怎么配置!!!
Nginx 配置如下:
server {
listen 80;
server_name xxx.com;
root /var/www/app;
index index.php index.html index.htm;
location / {
try_files $uri $uri/ /index.php;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /var/www/app;
}
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_split_path_info ^(.+\.php)(.*)$;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
location ~ /\.ht {
deny all;
}
}
1
star7th 2023-05-24 14:04:45 +08:00
你可以参数我的开源项目 showdoc 的 dockerfile https://github.com/star7th/showdoc/blob/master/Dockerfile
我觉得,因为 php 无法单独运行,必须配合 nginx 类的运行中间件,所以,我建议的把 php 跟 nginx 封装到一个 docker 容器里。使用 webdevops/php-nginx:7.4-alpine 作为基础构建镜像就是不错的选择,我基本不用在环境基础问题上纠结什么的。去 dockerhub 搜索下 ,他们还提供不同版本的镜像,比如 webdevops/php-nginx:8.0-alpine |
2
cccssss 2023-05-24 14:14:12 +08:00
127.0.0.1:9000
是访问了 nginx 容器内的 9000 端口 如果 php9000 绑定了机器的 9000 端口 ports: - 9000:9000 那么就将 127.0.0.1 换成宿主机的内网 ip 就行 或者试试将 127.0.0.1 换成 php 容器的容器名 |
4
chf007 2023-05-24 14:25:02 +08:00
本地也是同样的 Nginx 配置文件么?看线上的配置是把所有的请求都转到 /index.php 上去了,要么把 /resource 单独转发处理一下,要么打包时静态资源发布另外一个独立静态资源域名上
|
5
IdJoel 2023-05-24 14:28:41 +08:00
不推荐你这种方法,不行上个 Roadrunner 或者上个 swoole ,打俩容器太麻烦了
|
8
tudou1514 2023-05-24 16:05:59 +08:00
php 不建议玩 docker
|
9
yinmin 2023-05-24 16:06:50 +08:00
location / 改成下面这个,再试试:
location / { root /var/www/app; index index.php index.html index.htm; } |
11
ucando 2023-05-24 16:41:12 +08:00
静态文件访问不了就说明你的静态文件对于 nginx 这个容器来说是不可达的. 如果你把整个项目代码, 包括静态资源, 都打包进了 php 的那个容器, 那就只有 php 的容器可以访问到这些文件, 除非你把这些静态资源独立出来, 通过挂载的方式分别挂给 nginx 和 php 的容器, 这样才能正常跑起来
|
12
yprisoner 2023-05-24 17:38:30 +08:00
看下我的项目: https://github.com/nekoimi/rafutaria-php 在 fpm 环境下,php 和 nginx 打包在一起
|
14
yumusb 2023-05-24 18:57:32 +08:00 1
location ~ \.php$ {
fastcgi_pass php:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } version: '2' services: php: build: ./php/ volumes: - ${PWD}/www/:/app restart: always db: image: mysql 两个代码片段 够用了。 |