#php #docker #nginx
#php #docker #nginx
Вопрос:
Я использую macOS. Я работаю над образом Debian, созданным с помощью Dockerfile. Nginx, php-fpm был установлен в образе Debian. Затем я скопировал server
файл в /etc/nginx/sites-available/server
и создал его файл символической ссылки /etc/nginx/sites-enabled/
. Он также копировал srcs/info.php
файлы в /var/www/server/info.php
. После запуска службы nginx я могу получить доступ к своему личному IP-адресу 192.168.0.46
и просмотреть страницу приветствия NGINX. Однако при доступе 192.168.0.46/info.php
к странице не удается открыть страницу. Это то же самое, когда вставляются другие HTML-файлы.
Я посмотрел это в Google и обнаружил, что это была проблема ВКЛЮЧЕНИЯ /etc/nginx/nginx.conf
, но проблем не было.
Первым вопросом, который я заподозрил, был брандмауэр, но если это была проблема, не должен ли я не видеть страницу приветствия Nginx? Я думал и искал весь день, но не смог получить ответ. Пожалуйста, помогите мне!
Вот мои файлы:
Dockerfile :
FROM debian:buster
ARG DEBIAN_FRONTEND=noninteractive
ENV USER=root
COPY srcs/server.sites-available /etc/nginx/sites-available/server
COPY srcs/info.php /var/www/server/info.php
COPY srcs/login_form.html /var/www/server/login_form.html
# Installed mariadb-server instead of mysql-server
RUN apt-get update amp;amp; apt-get upgrade -y amp;amp;
apt-get install -y --no-install-recommends --no-install-suggests
nginx
openssl
mariadb-server
php-fpm
php-mysql amp;amp;
ln -s /etc/nginx/sites-available/server /etc/nginx/sites-enabled/
CMD service mysql start;
service nginx start;
bash;
# EXPOSE 80 for HTTP and 443 for HTTPS
EXPOSE 80 443
server.sites-доступно :
server {
listen 80;
listen [::]:80;
root /var/www/server;
index index.php index.html index.htm;
server_name server;
location / {
try_files $uri $uri/ =404;
}
location ~ .php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php7.3-fpm.sock;
}
}
info.php :
<?php
phpinfo();
?>
nginx.conf :
user www-data;
worker_processes auto;
pid /run/nginx.pid;
include /etc/nginx/modules-enabled/*.conf;
events {
worker_connections 768;
}
http {
##
# Basic Settings
##
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
include /etc/nginx/mime.types;
default_type application/octet-stream;
##
# SSL Settings
##
ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # Dropping SSLv3, ref: POODLE
ssl_prefer_server_ciphers on;
##
# Logging Settings
##
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
##
# Gzip Settings
##
gzip on;
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
}
Вот мои команды:
$ docker build -t server_image .
$ docker run -it -P --rm --name server_container server_image
Ответ №1:
server_name server
Директива означает, что http://server
будут обслуживаться только запросы на.
Вы должны добавить 192.168.0.46 server
в свой hosts
файл.
Я бы также рекомендовал изменить имя_сервера на что-то другое, например myserver.local (и добавить это в hosts
файл)
Комментарии:
1. Я изменил
server_name server
вserver_name myserver.local
соответствии с вашим советом. И я также добавляю192.168.0.46 myserver.local
/private/etc/hosts
. Но все равноhttp://myserver.local
терпит неудачу… Он даже больше не отображает страницы приветствия. Я снова проверю настройки брандмауэра и переадресацию портов.
Ответ №2:
используйте docker run -it -p 80:80 --rm --name server_container server_image
, чтобы исправить это. Но я не знаю почему…