Nginx в Docker обслуживает только страницы приветствия

#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 , чтобы исправить это. Но я не знаю почему…