Я хотел бы получить к нему доступ следующим образом, используя прокси-сервер nginx.
proxy.com/api/ -> proxy.com/api(подключенный сайт — example.com)
proxy.com/api -> proxy.com/api(подключенный сайт — example.com)
Первый прошел хорошо.
Второй вызовет ошибку 404 или перенаправит на завершающий слеш.
server {
listen 80;
server_name proxy.com;
location / {
root html;
index index.html index.htm;
}
location /api {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header HOST $host;
proxy_set_header X-NginX-Proxy true;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
rewrite ^/api(.*)$ $1?$args break;
# rewrite ^/api(.*)/$ /$1 break;
proxy_pass http://exmaple.com;
proxy_redirect off;
}
}
Это приведет к следующей ошибке:
Whitelabel Error Page
This application has no explicit mapping for /error, so you are seeing this as a fallback.
Wed Dec 07 06:55:15 UTC 2022
There was an unexpected error (type=Not Found, status=404).
журнал ошибок
the rewritten URI has a zero length, client: 127.0.0.1, server: proxy.com, request: "GET /api HTTP/1.1", host: "proxy.com"
Я попробовал следующее, но ошибка та же.
решение1
У вас есть proxy_pass http://exmaple.com;
ie цель вашего прокси, похоже, находится в корне сайта. Это приведет к HTTP-запросу без /
for root, выдавая ошибку о нулевой длине URI.
Я бы попробовал перенести переписывание за пределы location
прокси-сервера.
server {
listen 80;
server_name proxy.example.com;
# . . .
location ~ ^/api$ {
return 301 http://proxy.example.com/
}
location /api/ {
proxy_pass http://target.example.com;
}
}