我正在嘗試設定 nginx 和 php-fpm 影像以一起為 Laravel 應用程式作業。這是我的設定:
碼頭工人-compose.yml
version: "3.8"
services:
server:
container_name: nginx
build:
context: .
dockerfile: docker/nginx/Dockerfile
volumes:
- ./src/public:/var/www/html/public
ports:
- "8888:80"
depends_on:
- php
networks:
- laravel_net
php:
container_name: php
build:
context: .
dockerfile: docker/php/Dockerfile
ports:
- "9000:9000"
volumes:
- ./src:/var/www/html
networks:
- laravel_net
networks:
laravel_net:
driver: 'bridge'
Nginx
FROM nginx:stable-alpine
# puts app.conf into the container as /etc/nginx/nginx.conf
# has by default this: include /etc/nginx/conf.d/*.conf;
COPY docker/nginx/conf.d/*.conf /etc/nginx/conf.d/
WORKDIR /var/www/html
COPY ./src/public /var/www/html/public
docker/nginx/conf.d/app.conf
server {
listen 80;
server_name laravel.local;
index index.php index.html;
error_log /var/log/nginx/error.log;
access_log /var/log/nginx/access.log;
root /var/www/html/public;
location / {
try_files $uri /index.php$is_args$args;
}
location ~ \.php {
try_files $uri =404;
fastcgi_split_path_info ^(. \.php)(/. )$;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
fastcgi_index index.php;
fastcgi_pass php:9000;
}
}
PHP
FROM php:8.1-fpm-alpine
WORKDIR /var/www/html
COPY ./src /var/www/html
EXPOSE 9000
在 src 檔案夾內是 laravel 應用程式應該存在的地方,所以現在我只是在公共目錄上輸出 phpinfo() 只是為了檢查一切是否按預期作業 src/public/index.php
<?php
phpinfo();
如果我運行docker-compose up --build并且docker ps我可以看到容器正在運行
% docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
abc123 laravel_server "/docker-entrypoint.…" 8 seconds ago Up 6 seconds 0.0.0.0:8888->80/tcp nginx
abc456 laravel_php "docker-php-entrypoi…" 8 seconds ago Up 7 seconds 0.0.0.0:9000->9000/tcp php
也在兩者上docker-compose exec server /bin/sh,docker-compose exec php /bin/sh我可以看到容器內的 index.php 檔案
docker-compose exec server sh
/var/www/html # cat public/index.php
<?php
phpinfo();
/var/www/html # ls -la public
total 12
drwxr-xr-x 2 root root 4096 Feb 12 13:41 .
drwxr-xr-x 1 root root 4096 Feb 12 13:41 ..
-rw-r--r-- 1 root root 18 Feb 12 12:51 index.php
docker-compose exec php sh
/var/www/html # ls -lah public/
total 4K
drwxr-xr-x 3 root root 96 Feb 12 13:42 .
drwxr-xr-x 3 root root 96 Feb 10 21:28 ..
-rw-r--r-- 1 root root 18 Feb 12 13:42 index.php
/var/www/html # cat public/index.php
<?php
phpinfo();
但是,當我嘗試http://localhost:8888從瀏覽器訪問時,我得到默認的Welcome to nginx!頁。任何想法我做錯了什么?
uj5u.com熱心網友回復:
我認為問題是 nginx 配置。您正在復制app.conf到/etc/nginx/conf.d/但已經存在默認配置/etc/nginx/conf.d/default.conf。因為您看到的是默認的 nginx 頁面,所以我假設使用的是默認頁面。
嘗試重命名app.conf或default.conf將復制命令更改為
COPY docker/nginx/conf.d/app.conf /etc/nginx/conf.d/default.conf
uj5u.com熱心網友回復:
根據其他答案的評論:
根本沒有組態檔的優先級。它們都在運行時成為巨大的 NGINX 配置時間。
在您的情況下,默認 NGINX 配置將偵聽埠 80 作為默認服務器名稱。這是配置默認“歡迎使用 NGINX”頁面的地方。
在您的應用程式配置中,您server_name將laravel.local. 將其作為主機標頭發送curl -v -H "Host: laravel.local" 127.0.0.1:8888將讓 NGINX 從您app.conf的特定主機名中選擇服務器配置。
您可以將其添加到您的客戶端/etc/hosts/檔案中,以使其在您的網路瀏覽器中運行。
127.0.0.1 laravel.local
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/428590.html
標籤:php 码头工人 nginx 码头工人撰写 dockerfile
上一篇:Django中的nginx和gunicorn超時問題
下一篇:嘗試在Nginx服務器Ubuntu21.10實體上部署我的燒瓶應用程式時,我遇到了經典的“連接上游時權限被拒絕”
