Simple Nginx proxy_pass (me enlouquecendo)

2

O Nagios é atendido por um servidor virtual nginx chamado "nagios" com a seguinte configuração:

    # 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;
        }

Isso funciona bem na LAN. Para acessar de sites externos. Eu tenho um único endereço público ("newcompany.com"), e gostaria de fazer um proxy reverso de todo o site do Nagios (incluindo o local do CGI) para " link ". Eu tentei todos os tipos de reescrever e proxy_passes, nenhum dos quais wok. Alguém pode me mostrar como a diretiva de localização "/ nagios" dentro do servidor "newcompany.com" protegido deve ser semelhante a fim de fazer o proxy reverso corretamente para o servidor nagios? Aqui está a versão atual (quebrada) do servidor upstream:

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/;
        }
    
por aag 23.01.2015 / 15:58

2 respostas

2

Não consigo escrever comentários, mas acredito que a razão pela qual você precisa da barra final é porque nginx pensa que "/ nagios" se refere a um caminho exato, por exemplo, você pode encaminhar "/site.css" para "/css.php? file = site ", enquanto que com a barra no final, refere-se a um diretório inteiro e subdiretórios, não apenas ao caminho exato especificado. Neste caso, você quer que tudo sob / nagios / seja encaminhado, então a barra final é necessária. Fico feliz que você tenha encontrado sua solução.

    
por 24.01.2015 / 00:50
1

Acontece que a diretiva de localização proxy_pass location /nagios {} no servidor upstream teve que ser alterada para location /nagios/ {} . Eu não entendo por que, mas o proxy reverso agora funciona bem.

    
por 24.01.2015 / 00:01