简单的 Nginx proxy_pass (让我抓狂)

简单的 Nginx proxy_pass (让我抓狂)

Nagios 由名为“nagios”的 nginx 虚拟服务器提供服务,其配置如下:

    # nagios server
    server {
        server_name     nagios;
        root            /usr/share/nagios/share;
        listen          80;
        index           index.php index.html index.htm;
        access_log      /etc/nginx/logs/nagios.access.log; 
        allow 10.10.0.0/16;
        allow 127.0.0.1;


        location ~ \.php$ {
            fastcgi_pass   unix:/run/php-fpm/php-fpm.sock;
            fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
            fastcgi_param  AUTH_USER "nagios";
            fastcgi_param  REMOTE_USER "nagios";
            fastcgi_index  index.php;
            include        fastcgi.conf;
            }

        location ~ \.cgi$ {
            root            /usr/share/nagios/sbin;
            rewrite         ^/nagios/cgi-bin/(.*)\.cgi /$1.cgi break;
            fastcgi_param   AUTH_USER "nagios";
            fastcgi_param   REMOTE_USER "nagios";
            fastcgi_param   SCRIPT_FILENAME    $document_root$fastcgi_script_name;
            include         fastcgi.conf;
            fastcgi_pass    unix:/run/fcgiwrap.sock;
            }

        location /nagios {
            alias /usr/share/nagios/share;
        }

这在 LAN 内运行良好。用于从外部站点访问。我有一个公共地址(“newcompany.com”),我想将整个 Nagios 站点(包括 CGI 位置)反向代理到“https://newcompany.com/nagios“。我尝试了各种重写和代理密码,但都不起作用。有人能告诉我,在安全的“newcompany.com”服务器中,位置指令“/nagios”应该是什么样子,才能正确地反向代理到 nagios 服务器吗?这是上游服务器的当前(损坏)版本:

server {
    server_name newcompany.com antergos1;
    listen 80 default_server;
    root /usr;
    index     index.php index.html index.htm;
    access_log logs/default.access.log;
    error_log logs/default.error.log;


    location ~ \.(php|html|html|cgi)$ {
        fastcgi_pass   unix:/run/php-fpm/php-fpm.sock;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        fastcgi_param   AUTH_USER $remote_user;
        fastcgi_param   REMOTE_USER $remote_user;
        fastcgi_param   SCRIPT_FILENAME    $document_root$fastcgi_script_name;
        fastcgi_index  index.php;
        include        fastcgi.conf;
        }

    location /nagios {
        index index.php index.html index.htm;
        proxy_pass http://nagios/;
        }

答案1

我无法发表评论,但我认为您需要尾部斜杠的原因是因为 nginx 认为“/nagios”指的是一个确切的路径,例如,您可能将“/site.css”转发到“/css.php?file=site”,而末尾的斜杠指的是整个目录和子目录,而不仅仅是指定的确切路径。在这种情况下,您希望转发 /nagios/ 下的所有内容,因此需要尾部斜杠。我很高兴您找到了解决方案。

答案2

事实证明,location /nagios {}上游服务器中的 proxy_pass 位置指令必须更改为location /nagios/ {}。我不明白为什么,但是反向代理现在工作正常。

相关内容