Назад | Перейти на главную страницу

Простой Nginx proxy_pass (сводящий меня с ума)

Nagios обслуживается виртуальным сервером nginx с именем "nagios" со следующей конфигурацией:

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

Это хорошо работает из локальной сети. Для доступа с внешних сайтов. У меня есть единственный общедоступный адрес ("newcompany.com"), и я хотел бы выполнить обратный прокси-сервер всего сайта Nagios (включая расположение CGI) на "https://newcompany.com/nagios". Я перепробовал все виды перезаписи и proxy_passes, ни один из которых не работает. Может ли кто-нибудь показать мне, как должна выглядеть директива местоположения" / nagios "на защищенном сервере newcompany.com для правильного обратного прокси-сервера на nagios server? Вот текущая (сломанная) версия вышестоящего сервера:

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

Я не могу писать комментарии, но я считаю, что вам нужна косая черта в конце, потому что nginx считает, что «/ nagios» относится к одному точному пути, например, вы можете перенаправить «/site.css» на «/css.php?file=site» ", тогда как косая черта в конце относится ко всему каталогу и подкаталогам, а не только к указанному точному пути. В этом случае вы хотите, чтобы все, что находится в / nagios /, перенаправлялось, поэтому требуется косая черта в конце. Я рад, что ты нашел свое решение.

Оказывается, директива расположения proxy_passlocation /nagios {} на вышестоящем сервере пришлось заменить на location /nagios/ {}. Не понимаю почему, но обратный прокси сейчас работает нормально.