如何使用 nginx 反向代理转发到特定 URI

如何使用 nginx 反向代理转发到特定 URI

我有一个使用 nginx 反向代理流代理指向使用NTLM 身份验证,但我需要使用类似于 location 指令的东西来告诉这个反向代理将对该站点的请求发送到特定的 IRL。例如,如果用户要请求此站点:

https://mysite.mydomain.com

我想转发给http://mysite.mydomain.com/xyz

通常我会使用 location 指令,但每当我将 location 指令添加到我当前的配置中时,都会出现错误"location" directive is not allowed here in /opt/nginx/nginx.conf:43

我的当前配置(由于我遇到的 NTLM 问题,其中包含很多我以前从未做过的东西)如下所示

/opt/nginx/nginx.conf

worker_processes 1;

events {
    worker_connections 1024;
}

stream {
    upstream backend {
       hash $remote_addr consistent;

       server mysite.mydomain.com:80 weight=5;
       server 192.168.0.50:80            max_fails=3 fail_timeout=30s;


    }

server {
    listen 443 ssl;

    ssl_certificate /usr/local/nginx/conf/mydomain.com.crt;
    ssl_certificate_key /usr/local/nginx/conf/mydomain.com.key;
    ssl_session_cache shared:SSL:10m;

    ssl_session_timeout 5m;

    proxy_connect_timeout 1s;
    proxy_timeout 3s;
    proxy_pass backend;

    }

}

我不确定如何添加 /xyz URI。如果我将其添加到此文件中任何 IP 的末尾,则会出现错误,如果我尝试在服务器部分内添加位置指令,则会出现该错误。

当然,理想情况下,这实际上会转发到他们放在网址末尾的任何扩展名,并尝试,例如 /abc 或 /xyz,将转发到http://mysite.mydomain.com/abc, 和http://mysite.mydomain.com/xyz任何帮助都值得感激。

答案1

我之所以location在流文档中找不到如何在流代理内进行设置,是因为这是不可能的。

location指令仅允许在节server{}内的节中使用http{}

如果我更多地了解流连接的工作方式之间的区别,这可能会相当直观。

这个答案是由 Maxim Dounin 给出的,他给了我很多帮助,而且很棒。

对于任何想知道如何执行此操作的人来说,流部分与 http 部分完全分开,您可以将所需的一切放在 http 部分中。

相关内容