Nginx Обратный прокси к удаленному Nginx Сервер работает PHP Приложение - PullRequest
0 голосов
/ 24 марта 2020

Я установил приложение PHP, работающее на сервере RHEL со следующей конфигурацией, а также внес несколько изменений в файл nginx .conf, приложение работает нормально.

magento.conf

upstream fastcgi_backend {
  server   unix:/run/php-fpm/magento.sock;
}
server {
    listen 80;
    set $MAGE_ROOT /var/www/magento2;
    set $MAGE_MODE developer;
    access_log /var/log/nginx/magento-access.log;
    error_log /var/log/nginx/magento-error.log;
    include /var/www/magento2/nginx.conf.sample;
}

У меня есть другой сервер nginx, который я пытаюсь использовать в качестве обратного прокси-сервера для приложения PHP, работающего на удаленный сервер. Проблема, с которой я сталкиваюсь, заключается в том, что при загрузке сайта с моего Nginx IP-адреса в браузере изменяется IP-адрес сервера приложений PHP.

Я хочу, чтобы IP-адрес оставался таким же, как и у * Сервер 1024 * вместо изменения IP-адреса PHP Сервер приложений

Файл конфигурации для обратного прокси находится ниже reverse.conf

server {
  listen 80;
  #server_name mydomain.com;
    location / {
      access_log off;
      proxy_pass http://10.128.0.10:80;
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header Host $host;
      proxy_redirect     off;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

Пожалуйста, помогите мне. Спасибо

Ответы [ 2 ]

0 голосов
/ 26 марта 2020

С Lua:

server
{
    listen 80;
    # server_name example.com;

    # resolver 127.0.0.11:53;  # Docker-DNS. Needed for proxy_pass with variables inside!

    set $MY_SCHEME http;
    set $MY_HOST example.com;
    set $target "${MY_SCHEME}://${MY_HOST}";

    location /
    {
        rewrite_by_lua_block
        {
            local map = {
                GET = ngx.HTTP_GET,
                POST = ngx.HTTP_POST,
            }
            ngx.req.read_body()
            local res = ngx.location.capture('/example123' .. ngx.var.request_uri, {
                method = map[ngx.var.request_method],
                body = ngx.var.request_body
            })
            -- Detect/change redirect...
            local redirect_target = res.header.Location
            if redirect_target and res.status > 300 and res.status < 309 then
                -- ngx.log(ngx.ALERT, 'redirect_target: '..redirect_target)
                local redirect_target_changed, n, err = ngx.re.gsub(redirect_target, '^https?[:][/][/]10[.]128[.]0[.]10', ngx.var.target)
                -- ngx.log(ngx.ALERT, 'redirect_target_changed: '..redirect_target_changed)
                return ngx.redirect(redirect_target_changed, 303)
            elseif res.status == 500 then
                return ngx.exit(500)
            else
                ngx.exec('@example123_normal')
                return ngx.exit(ngx.HTTP_OK)
            end
        }
    }

    location ~ ^/example123(.*)$
    {
        access_log off;
        proxy_pass http://10.128.0.10:80$1$is_args$args;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header Host $host;
        proxy_redirect http://10.128.0.10/ $target/;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-Real-IP $remote_addr;
    }

    location @example123_normal
    {
        access_log off;
        proxy_pass http://10.128.0.10:80$request_uri;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header Host $host;
        proxy_redirect http://10.128.0.10/ $target/;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

Полностью не проверено. И если вы не можете сделать Lua и RegEx, это становится трудно.

0 голосов
/ 25 марта 2020

Без Lua вы можете попытаться изменить строку proxy_redirect off; на proxy_redirect http://10.128.0.10:80 http://my.domain.com:80;.

Возможно, повторите эту строку с sla sh в конце и / или https в начале (порт 443 вместо 80).

https://unix.stackexchange.com/a/291007/239596

...