Проблема с редиректом (Docker)

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
GreenApple
Сообщения: 3
Зарегистрирован: 2021.09.22, 13:42

Проблема с редиректом (Docker)

Сообщение GreenApple »

Добрый день!

Взываю к вашей помощи.
Переношу приложение в docker, использую образы nginx + apache + php.
Пробросил свой локальный порт 8080 на 80 порт в докере nginx (т.к. на локальном сервере 80 порт занят), приложение работает нормально по адресу localhost:8080, однако если я совершаю редирект на какой-нибудь экшен (return $this->redirect(['controller/action'])), то вместо порта 8080 (http://localhost:8080/controller/action) меня перекидывает на порт 80 (http://localhost/controller/action).
Ну и если я освобождаю свой 80 порт и пробрасываю его в докер, то такой проблемы нет.
Ума не приложу, куда копать.

P.S.: Прошу сильно не пинать, ранее опыта в настройке ни apache, ни nginx, ни docker не было.

Конфиги nginx:

worker_processes 1;

events {
worker_connections 1024;
}

http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;

server {
charset utf-8;
client_max_body_size 128M;

listen 80;
listen [::]:80;

server_name 127.0.0.1 localhost;

location ~ /\.ht {
deny all;
}

location / {
proxy_pass http://apache;
proxy_redirect http://apache /;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-Host $remote_addr;
proxy_connect_timeout 120;
proxy_send_timeout 120;
proxy_read_timeout 180;
}
}
}

Конфиги apache:

ServerRoot "/usr/local/apache2"

Listen 80

LoadModule authn_file_module modules/mod_authn_file.so
LoadModule authn_core_module modules/mod_authn_core.so
LoadModule authz_host_module modules/mod_authz_host.so
LoadModule authz_groupfile_module modules/mod_authz_groupfile.so
LoadModule authz_user_module modules/mod_authz_user.so
LoadModule authz_core_module modules/mod_authz_core.so
LoadModule access_compat_module modules/mod_access_compat.so
LoadModule auth_basic_module modules/mod_auth_basic.so
LoadModule reqtimeout_module modules/mod_reqtimeout.so
LoadModule filter_module modules/mod_filter.so
LoadModule mime_module modules/mod_mime.so
LoadModule log_config_module modules/mod_log_config.so
LoadModule env_module modules/mod_env.so
LoadModule headers_module modules/mod_headers.so
LoadModule setenvif_module modules/mod_setenvif.so
LoadModule version_module modules/mod_version.so
LoadModule unixd_module modules/mod_unixd.so
LoadModule status_module modules/mod_status.so
LoadModule autoindex_module modules/mod_autoindex.so
LoadModule dir_module modules/mod_dir.so
LoadModule alias_module modules/mod_alias.so
LoadModule mpm_event_module modules/mod_mpm_event.so
LoadModule rewrite_module modules/mod_rewrite.so
# additional
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so

ServerAdmin you@example.com

AddDefaultCharset UTF-8

Options FollowSymLinks
DirectoryIndex index.php index.html
RewriteEngine on

RewriteRule /\. - [L,F]

DocumentRoot /var/www/html/frontend/web
<Directory /var/www/html/frontend/web>
AllowOverride none
<IfVersion < 2.4>
Order Allow,Deny
Allow from all
</IfVersion>
<IfVersion >= 2.4>
Require all granted
</IfVersion>

# if a directory or a file exists, use the request directly
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# otherwise forward the request to index.php
RewriteRule ^ index.php [L]
</Directory>

# redirect to the URL without a trailing slash (uncomment if necessary)
#RewriteRule ^/stuff/$ /stuff [L,R=301]

Alias /stuff /var/www/html/backend/web
# prevent the directory redirect to the URL with a trailing slash
RewriteRule ^/stuff$ /stuff/ [L,PT]
<Directory /var/www/html/backend/web>
AllowOverride none
<IfVersion < 2.4>
Order Allow,Deny
Allow from all
</IfVersion>
<IfVersion >= 2.4>
Require all granted
</IfVersion>

# if a directory or a file exists, use the request directly
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# otherwise forward the request to index.php
RewriteRule ^ index.php [L]
</Directory>

<IfModule unixd_module>
User daemon
Group daemon
</IfModule>

<IfModule dir_module>
DirectoryIndex index.php index.pl index.cgi index.asp index.shtml index.html index.htm \
default.php default.pl default.cgi default.asp default.shtml default.html default.htm \
home.php home.pl home.cgi home.asp home.shtml home.html home.htm
</IfModule>

<Files ".ht*">
Require all denied
</Files>

<IfModule log_config_module>
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %b" common

<IfModule logio_module>
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio
</IfModule>
</IfModule>

<IfModule alias_module>
ScriptAlias /cgi-bin/ "/usr/local/apache2/cgi-bin/"
</IfModule>

<Directory "/usr/local/apache2/cgi-bin">
AllowOverride All
Options None
Require all granted
</Directory>

<IfModule headers_module>
RequestHeader unset Proxy early
</IfModule>

<IfModule mime_module>
TypesConfig conf/mime.types
AddType application/x-compress .Z
AddType application/x-gzip .gz .tgz
AddType text/html .shtml
AddHandler cgi-script .cgi .pl .asp
AddOutputFilter INCLUDES .shtml
</IfModule>

#
# Настройка FPM
#
<IfModule proxy_module>
<FilesMatch "\.php$">
SetHandler "proxy:fcgi://php:9000"
</FilesMatch>
</IfModule>
feodor
Сообщения: 95
Зарегистрирован: 2013.01.28, 00:02

Re: Проблема с редиректом (Docker)

Сообщение feodor »

В docker-compose прописать порт?

Код: Выделить всё

services:
  nginx:
    ...
    ports:
        - 8080:80
GreenApple
Сообщения: 3
Зарегистрирован: 2021.09.22, 13:42

Re: Проблема с редиректом (Docker)

Сообщение GreenApple »

feodor писал(а): 2021.09.29, 11:44 В docker-compose прописать порт?

Код: Выделить всё

services:
  nginx:
    ...
    ports:
        - 8080:80
Это я все прописал и приложение нормально работает на 8080 порту локальной машины, пока где-нибудь не вызовется редирект. И редиректит на нужный адрес, но на 80 порт. Хотя если вручную зайти по этому же адресу, но на 8080 порт, то страница открывается нормально.
Аватара пользователя
ElisDN
Сообщения: 5845
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

Re: Проблема с редиректом (Docker)

Сообщение ElisDN »

Вы забыли прокинуть X-Forwarded-Port
GreenApple
Сообщения: 3
Зарегистрирован: 2021.09.22, 13:42

Re: Проблема с редиректом (Docker)

Сообщение GreenApple »

ElisDN писал(а): 2021.09.30, 09:18 Вы забыли прокинуть X-Forwarded-Port
Решил проблему немного иначе - в конфигах nginx прописал "proxy_set_header Host localhost:8080". Не уверен, что это правильно, но для локальной машины главное, чтобы работало. А как вы предлагаете прокинуть X-Forwarded-Port? В настройках nginx? Или это нужно делать в docker-compose файле? Добавлял в конфиг nginx "proxy_set_header X-Forwarded-Port 8080", но это не помогло
Аватара пользователя
ElisDN
Сообщения: 5845
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

Re: Проблема с редиректом (Docker)

Сообщение ElisDN »

GreenApple писал(а): 2021.10.05, 10:08 А как вы предлагаете прокинуть X-Forwarded-Port? В настройках nginx?
Рядом с X-Forwarded-Host:

Код: Выделить всё

proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header  X-Forwarded-Host $remote_addr;
proxy_set_header  X-Forwarded-Port $server_port;
Ответить