Обратный прокси Nginx скрыть URL

Вот мой nginx proxy.conf файл,

server {
    listen port 9090;
    root /usr/share/nginx/html; # not sure whether this line is needed or not
    index index.html; # not sure whether this line is needed or not
    location / {
        proxy_pass http://google.com
    }
}

Я пытаюсь скрыть оригинальный адрес сайта, пример google.com за моим localhost:9090,

Но когда я запускаю службу nginx, используя это proxy.conf файл и тип localhost:9090 в моем браузере он правильно перенаправляет меня на google.com но это показывает URL google.com в браузере.

Я видел здесь несколько вопросов, таких как Как скрыть URL/URI бэкенда с обратным прокси-сервером Nginx, но я так и не получил ответа на свою проблему.

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

1 ответ

Пример для Ubuntu 16.04 и Ubuntu 18.04

Бэкэнды, которые возвращают жесткие (301) или временные (302) перенаправления в браузер - браузер выполняет их - могут легко отвлечь пользователя от вашего Nginx. Это может быть перехвачено с Луа.

То, что я показываю здесь, по крайней мере юридически находится в серой области, а скорее в черном (в отношении Google). Не вводить в производство! Все заголовки безопасности, которые Google прикрепляет к запросам, все равно испортят вам удовольствие.

Установка

# sudo apt purge nginx-*  # maybe necessary, backup your /etc/nginx/… configs before!
sudo add-apt-repository ppa:nginx/stable
sudo apt-cache show nginx-extras | grep -E '(xenial|bionic)'
sudo apt install nginx-extras  # Lua support (nginx-extras is > nginx-full)

конфиг

/etc/nginx/sites-available/test.conf

server
{
    listen 80;
    listen [::]:80;

    server_name niegit.com;

    # Nginx vs. Lua
    #
    # Concat: NIL vs. ..
    # $request_uri vs. ngx.var.request_uri  # path with query string
    # $is_args$args vs. ngx.var.is_args .. ngx.var.args  # query string
    # $1 vs. ngx.var[1]  # regex capturing group 1
    # $2 vs. ngx.var[2]  # regex capturing group 2

    location /
    {
        rewrite_by_lua_block
        {
            -- Probs with AJAX/XHR and/or Websockets!
            ngx.log(ngx.ALERT, 'See this text in /var/log/nginx/error.log')
            local res = ngx.location.capture('/location_2' .. (ngx.var.request_uri or ''))
            -- Detect/change redirect...
            if res.status == 301 or res.status == 302 or res.status == 303 or res.status == 304 then
                local redirect_target = res.header.Location
                ngx.log(ngx.ALERT, redirect_target)
                local redirect_target_changed, n, err = ngx.re.gsub(redirect_target, 'https?[:]//(?:www[.])?google[.]com(?:[:][0-9]*)?', 'http://niegit.com')
                ngx.log(ngx.ALERT, redirect_target_changed)
                return ngx.redirect(redirect_target_changed, 302)
            else
                ngx.exec('@named_location_3')
                return ngx.exit(ngx.HTTP_OK)
            end
        }
    }

    location /location_2
    {
        proxy_pass https://www.google.com/;
    }

    location @named_location_3
    {
        proxy_pass https://www.google.com$request_uri;
    }
}

Активировать

cd /etc/nginx/sites-enabled
sudo ln -s ../sites-available/test.conf test.conf
sudo nginx -t
sudo service nginx reload  # or newer: sudo systemctl reload nginx

Если нет sites-available а также sites-enabled папки, проще говоря test.conf в вашем conf.d папки.

тестирование

curl -I niegit.com

Если вы предлагаете иностранные бэкэнды под своим собственным доменом, это должно происходить только в тестовых целях или по запросу владельца. Показанный здесь пример, конечно, может быть легально использован для ваших собственных бэкэндов и спасет вашу задницу.;)

Другие вопросы по тегам