Назад | Перейти на главную страницу

Docker nginx: перенаправляет на порт 80 вместо сопоставленного порта

Я делаю это решение wordpress и из соображений "диеты" я перехожу к альпийским изображениям.

При этом мне удалось использовать внешнюю конфигурацию (файл) и через том передаю в nginx.

server {
  listen 80;
  root /var/www/html;
  index index.php;

  location / {
    try_files $uri $uri/ /index.php;
  }

  location ~ .php{
    try_files $uri =404;
    fastcgi_pass wordpress:9000;
    fastcgi_index index.php;
    include fastcgi_params;
    fastcgi_param  GATEWAY_INTERFACE  CGI/1.1;
    fastcgi_param  SERVER_SOFTWARE    nginx;
    fastcgi_param  QUERY_STRING       $query_string;
    fastcgi_param  REQUEST_METHOD     $request_method;
    fastcgi_param  CONTENT_TYPE       $content_type;
    fastcgi_param  CONTENT_LENGTH     $content_length;
    fastcgi_param  SCRIPT_FILENAME    $document_root$fastcgi_script_name;
    fastcgi_param  SCRIPT_NAME        $fastcgi_script_name;
    fastcgi_param  REQUEST_URI        $request_uri;
    fastcgi_param  DOCUMENT_URI       $document_uri;
    fastcgi_param  DOCUMENT_ROOT      $document_root;
    fastcgi_param  SERVER_PROTOCOL    $server_protocol;
    fastcgi_param  REMOTE_ADDR        $remote_addr;
    fastcgi_param  REMOTE_PORT        $remote_port;
    fastcgi_param  SERVER_ADDR        $server_addr;
    fastcgi_param  SERVER_PORT        $server_port;
    fastcgi_param  SERVER_NAME        $server_name;
    fastcgi_intercept_errors  on;
  }
}

Но когда я пытаюсь посетить его в браузере, давая http: // локальный: 8080 (где я сопоставляю порт 80 с моим docker-compose.yml):

version: '2'
services:
  nginx:
    image: nginx:alpine
    ports:
      - "8080:80"
    volumes:
      - './conf/nginx/:/etc/nginx/conf.d/:ro'
    links:
      - "wordpress"
    volumes_from:
      - "wordpress:ro"

  wordpress-db:
    image: mariadb
    environment:
      MYSQL_RANDOM_ROOT_PASSWORD: "yes"
      MYSQL_ONETIME_PASSWORD: "yes"
      MYSQL_DATABASE: "wordpress"
      MYSQL_USER: '${WORDPRESS_MYSQL_USER}'
      MYSQL_PASSWORD: '${WORDPRESS_MYSQL_PASSWORD}'

  wordpress:
    build:
      context: .
      dockerfile: Dockerfile
    image: ellakcy/wordpressswithplugins:alpine
    links:
      - wordpress-db
    environment:
        WORDPRESS_DB_HOST: wordpress-db:/var/run/mysqld/mysqld.sock
        WORDPRESS_DB_USER: '${WORDPRESS_MYSQL_USER}'
        WORDPRESS_DB_PASSWORD: '${WORDPRESS_MYSQL_PASSWORD}'
        WORDPRESS_ADMIN_USERNAME: '${WORDPRESS_ADMIN_USER}'
        WORDPRESS_ADMIN_PASSWORD: '${WORDPRESS_ADMIN_PASSWORD}'
        WORDPRESS_URL: '${WORDPRESS_URL}'

Но почему-то кажется, что перенаправляет на 80 порт.

Также, когда я бегу через docker-compose up command я получаю следующий фрагмент журнала:

wordpress_1     | 172.23.0.4 -  18/Aug/2017:12:36:57 +0000 "GET /index.php" 301
nginx_1         | 172.23.0.1 - - [18/Aug/2017:12:36:57 +0000] "GET / HTTP/1.1" 301 5 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:55.0) Gecko/20100101 Firefox/55.0" "-"
wordpress_1     | 172.23.0.4 -  18/Aug/2017:12:41:22 +0000 "GET /index.php" 301
nginx_1         | 172.23.0.1 - - [18/Aug/2017:12:41:22 +0000] "GET / HTTP/1.1" 301 5 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:55.0) Gecko/20100101 Firefox/55.0" "-"

Итак, я предполагаю, что по какой-то причине nginx выполняет перенаправление 301 на порт 80. У вас есть идеи, почему это происходит?

Редактировать 1

Я также попытался установить порт 8080 в конфигурацию nginx:

Конфигурация Nginx:

server {
  listen 8080;
  root /var/www/html;
  index index.php;

  location / {
    try_files $uri $uri/ /index.php;
  }

  location ~ .php{
    try_files $uri =404;
    fastcgi_pass wordpress:9000;
    fastcgi_index index.php;
    include fastcgi_params;
    fastcgi_param  GATEWAY_INTERFACE  CGI/1.1;
    fastcgi_param  SERVER_SOFTWARE    nginx;
    fastcgi_param  QUERY_STRING       $query_string;
    fastcgi_param  REQUEST_METHOD     $request_method;
    fastcgi_param  CONTENT_TYPE       $content_type;
    fastcgi_param  CONTENT_LENGTH     $content_length;
    fastcgi_param  SCRIPT_FILENAME    $document_root$fastcgi_script_name;
    fastcgi_param  SCRIPT_NAME        $fastcgi_script_name;
    fastcgi_param  REQUEST_URI        $request_uri;
    fastcgi_param  DOCUMENT_URI       $document_uri;
    fastcgi_param  DOCUMENT_ROOT      $document_root;
    fastcgi_param  SERVER_PROTOCOL    $server_protocol;
    fastcgi_param  REMOTE_ADDR        $remote_addr;
    fastcgi_param  REMOTE_PORT        $remote_port;
    fastcgi_param  SERVER_ADDR        $server_addr;
    fastcgi_param  SERVER_PORT        $server_port;
    fastcgi_param  SERVER_NAME        $server_name;
    fastcgi_intercept_errors  on;
  }
}

docker-compose.yml:

версия: '2' services: nginx: image: nginx: alpine ports: - "8080: 8080" тома: - './conf/nginx/:/etc/nginx/conf.d/:ro' ссылки: - "wordpress "volume_from: -" wordpress: ro "

  wordpress-db:
    image: mariadb
    environment:
      MYSQL_RANDOM_ROOT_PASSWORD: "yes"
      MYSQL_ONETIME_PASSWORD: "yes"
      MYSQL_DATABASE: "wordpress"
      MYSQL_USER: '${WORDPRESS_MYSQL_USER}'
      MYSQL_PASSWORD: '${WORDPRESS_MYSQL_PASSWORD}'

  wordpress:
    build:
      context: .
      dockerfile: Dockerfile
    image: ellakcy/wordpressswithplugins:alpine
    links:
      - wordpress-db
    environment:
        WORDPRESS_DB_HOST: wordpress-db:/var/run/mysqld/mysqld.sock
        WORDPRESS_DB_USER: '${WORDPRESS_MYSQL_USER}'
        WORDPRESS_DB_PASSWORD: '${WORDPRESS_MYSQL_PASSWORD}'
        WORDPRESS_ADMIN_USERNAME: '${WORDPRESS_ADMIN_USER}'
        WORDPRESS_ADMIN_PASSWORD: '${WORDPRESS_ADMIN_PASSWORD}'
        WORDPRESS_URL: '${WORDPRESS_URL}'

Я все еще веду такое же поведение

Я делаю это решение wordpress и из соображений "диеты" я перехожу к изображениям альпийских гор.

При этом мне удалось использовать внешнюю конфигурацию (файл) и через том передаю в nginx.

server {
  listen 80;
  root /var/www/html;
  index index.php;

  location / {
    try_files $uri $uri/ /index.php;
  }

  location ~ .php{
    try_files $uri =404;
    fastcgi_pass wordpress:9000;
    fastcgi_index index.php;
    include fastcgi_params;
    fastcgi_param  GATEWAY_INTERFACE  CGI/1.1;
    fastcgi_param  SERVER_SOFTWARE    nginx;
    fastcgi_param  QUERY_STRING       $query_string;
    fastcgi_param  REQUEST_METHOD     $request_method;
    fastcgi_param  CONTENT_TYPE       $content_type;
    fastcgi_param  CONTENT_LENGTH     $content_length;
    fastcgi_param  SCRIPT_FILENAME    $document_root$fastcgi_script_name;
    fastcgi_param  SCRIPT_NAME        $fastcgi_script_name;
    fastcgi_param  REQUEST_URI        $request_uri;
    fastcgi_param  DOCUMENT_URI       $document_uri;
    fastcgi_param  DOCUMENT_ROOT      $document_root;
    fastcgi_param  SERVER_PROTOCOL    $server_protocol;
    fastcgi_param  REMOTE_ADDR        $remote_addr;
    fastcgi_param  REMOTE_PORT        $remote_port;
    fastcgi_param  SERVER_ADDR        $server_addr;
    fastcgi_param  SERVER_PORT        $server_port;
    fastcgi_param  SERVER_NAME        $server_name;
    fastcgi_intercept_errors  on;
  }
}

Но когда я пытаюсь посетить его в браузере, давая http: // локальный: 8080 (где я сопоставляю порт 80 с моим docker-compose.yml):

version: '2'
services:
  nginx:
    image: nginx:alpine
    ports:
      - "8080:80"
    volumes:
      - './conf/nginx/:/etc/nginx/conf.d/:ro'
    links:
      - "wordpress"
    volumes_from:
      - "wordpress:ro"

  wordpress-db:
    image: mariadb
    environment:
      MYSQL_RANDOM_ROOT_PASSWORD: "yes"
      MYSQL_ONETIME_PASSWORD: "yes"
      MYSQL_DATABASE: "wordpress"
      MYSQL_USER: '${WORDPRESS_MYSQL_USER}'
      MYSQL_PASSWORD: '${WORDPRESS_MYSQL_PASSWORD}'

  wordpress:
    build:
      context: .
      dockerfile: Dockerfile
    image: ellakcy/wordpressswithplugins:alpine
    links:
      - wordpress-db
    environment:
        WORDPRESS_DB_HOST: wordpress-db:/var/run/mysqld/mysqld.sock
        WORDPRESS_DB_USER: '${WORDPRESS_MYSQL_USER}'
        WORDPRESS_DB_PASSWORD: '${WORDPRESS_MYSQL_PASSWORD}'
        WORDPRESS_ADMIN_USERNAME: '${WORDPRESS_ADMIN_USER}'
        WORDPRESS_ADMIN_PASSWORD: '${WORDPRESS_ADMIN_PASSWORD}'
        WORDPRESS_URL: '${WORDPRESS_URL}'

Но почему-то кажется, что перенаправляет на 80 порт.

Также, когда я бегу через docker-compose up command я получаю следующий фрагмент журнала:

wordpress_1     | 172.23.0.4 -  18/Aug/2017:12:36:57 +0000 "GET /index.php" 301
nginx_1         | 172.23.0.1 - - [18/Aug/2017:12:36:57 +0000] "GET / HTTP/1.1" 301 5 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:55.0) Gecko/20100101 Firefox/55.0" "-"
wordpress_1     | 172.23.0.4 -  18/Aug/2017:12:41:22 +0000 "GET /index.php" 301
nginx_1         | 172.23.0.1 - - [18/Aug/2017:12:41:22 +0000] "GET / HTTP/1.1" 301 5 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:55.0) Gecko/20100101 Firefox/55.0" "-"

Итак, я предполагаю, что по какой-то причине nginx выполняет перенаправление 301 на порт 80. У вас есть идеи, почему это происходит?

Редактировать 1

Я также попытался установить порт 8080 в конфигурацию nginx:

Конфигурация Nginx:

server {
  listen 8080;
  root /var/www/html;
  index index.php;

  location / {
    try_files $uri $uri/ /index.php;
  }

  location ~ .php{
    try_files $uri =404;
    fastcgi_pass wordpress:9000;
    fastcgi_index index.php;
    include fastcgi_params;
    fastcgi_param  GATEWAY_INTERFACE  CGI/1.1;
    fastcgi_param  SERVER_SOFTWARE    nginx;
    fastcgi_param  QUERY_STRING       $query_string;
    fastcgi_param  REQUEST_METHOD     $request_method;
    fastcgi_param  CONTENT_TYPE       $content_type;
    fastcgi_param  CONTENT_LENGTH     $content_length;
    fastcgi_param  SCRIPT_FILENAME    $document_root$fastcgi_script_name;
    fastcgi_param  SCRIPT_NAME        $fastcgi_script_name;
    fastcgi_param  REQUEST_URI        $request_uri;
    fastcgi_param  DOCUMENT_URI       $document_uri;
    fastcgi_param  DOCUMENT_ROOT      $document_root;
    fastcgi_param  SERVER_PROTOCOL    $server_protocol;
    fastcgi_param  REMOTE_ADDR        $remote_addr;
    fastcgi_param  REMOTE_PORT        $remote_port;
    fastcgi_param  SERVER_ADDR        $server_addr;
    fastcgi_param  SERVER_PORT        $server_port;
    fastcgi_param  SERVER_NAME        $server_name;
    fastcgi_intercept_errors  on;
  }
}

docker-compose.yml:

version: '2'
    services:
      nginx:
        image: nginx:alpine
        ports:
          - "8080:8080"
        volumes:
          - './conf/nginx/:/etc/nginx/conf.d/:ro'
        links:
          - "wordpress"
        volumes_from:
          - "wordpress:ro"

      wordpress-db:
        image: mariadb
        environment:
          MYSQL_RANDOM_ROOT_PASSWORD: "yes"
          MYSQL_ONETIME_PASSWORD: "yes"
          MYSQL_DATABASE: "wordpress"
          MYSQL_USER: '${WORDPRESS_MYSQL_USER}'
          MYSQL_PASSWORD: '${WORDPRESS_MYSQL_PASSWORD}'

      wordpress:
        build:
          context: .
          dockerfile: Dockerfile
        image: ellakcy/wordpressswithplugins:alpine
        links:
          - wordpress-db
        environment:
            WORDPRESS_DB_HOST: wordpress-db:/var/run/mysqld/mysqld.sock
            WORDPRESS_DB_USER: '${WORDPRESS_MYSQL_USER}'
            WORDPRESS_DB_PASSWORD: '${WORDPRESS_MYSQL_PASSWORD}'
            WORDPRESS_ADMIN_USERNAME: '${WORDPRESS_ADMIN_USER}'
            WORDPRESS_ADMIN_PASSWORD: '${WORDPRESS_ADMIN_PASSWORD}'
            WORDPRESS_URL: '${WORDPRESS_URL}'

Я по-прежнему веду себя так же.

Редактировать 2

Я также пробовал использовать следующие настройки nginx (для контейнера nginx)

server {
  listen 8080;
  root /var/www/html;
  index index.php;

  location / {
    try_files $uri $uri/ /index.php?q=$uri&$args;
  }

  location ~ .php {
    try_files $uri =404;
    fastcgi_pass wordpress:9000;
    fastcgi_split_path_info ^(.+\.php)(/.+)$;
    fastcgi_index index.php;
    include fastcgi_params;
    fastcgi_param  GATEWAY_INTERFACE  CGI/1.1;
    fastcgi_param  SERVER_SOFTWARE    nginx;
    fastcgi_param  QUERY_STRING       $query_string;
    fastcgi_param  REQUEST_METHOD     $request_method;
    fastcgi_param  CONTENT_TYPE       $content_type;
    fastcgi_param  CONTENT_LENGTH     $content_length;
    fastcgi_param  SCRIPT_FILENAME    $document_root$fastcgi_script_name;
    fastcgi_param  SCRIPT_NAME        $fastcgi_script_name;
    fastcgi_param  REQUEST_URI        $request_uri;
    fastcgi_param  DOCUMENT_URI       $document_uri;
    fastcgi_param  DOCUMENT_ROOT      $document_root;
    fastcgi_param  SERVER_PROTOCOL    $server_protocol;
    fastcgi_param  REMOTE_ADDR        $remote_addr;
    fastcgi_param  REMOTE_PORT        $remote_port;
    fastcgi_param  SERVER_ADDR        $server_addr;
    fastcgi_param  SERVER_PORT        $server_port;
    fastcgi_param  SERVER_NAME        $server_name;
    fastcgi_intercept_errors  on;
  }

}

И все же я не вижу света на своем пути.