Вот мой 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 , но я не совсем понял свою проблему.
Если вам нужна дополнительная информация по этому поводу, спрашивайте в комментариях. Я готов предоставить любую информацию, если это позволит вам решить мою проблему.
Бэкенды, которые возвращают жесткие (301) или временные (302 или новее 303) перенаправления в браузер - браузер их выполняет - могут легко увести пользователя от вашего Nginx. Это можно перехватить с помощью Lua.
То, что я показываю здесь, по крайней мере юридически находится в серой зоне, а скорее черным (в отношении 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 -P '((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
#
# Comment: # vs. --
# 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 map = {
GET = ngx.HTTP_GET,
POST = ngx.HTTP_POST,
}
ngx.req.read_body()
local res = ngx.location.capture('/location_2' .. (ngx.var.request_uri or ''), {
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)
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, 303)
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 # not active at the moment
Если вы предлагаете сторонние серверы под своим собственным доменом, это должно происходить только в тестовых целях или вы спрашиваете владельца. Пример, показанный здесь, конечно, можно законно использовать для ваших собственных бэкэндов и спасти вашу задницу. ;)