Конфигурация Nginx для Nagios Core в Ubuntu 22.04

Я изо всех сил пытаюсь настроить внешний интерфейс nginx для основного сервера Nagios на локальной тестовой виртуальной машине, для которой я надеюсь опробовать ее.

Я думаю, что какое-то время у меня были проблемы с PHP-FPM, которые были решены, по крайней мере, частично, поскольку теперь я могу видеть домашнюю страницу «Nagios Core» при загрузке сайта.

Однако я не могу перейти на какие-либо подстраницы, мне всегда дают 403 запрета.

Какие еще идеи конфигурации я могу попробовать?

Пакеты, установленные на моем хосте Ubuntu 22.04:

nagios-images/jammy,now 0.9.4 all [installed,automatic]
nagios4-cgi/jammy,now 4.4.6-4 amd64 [installed,automatic]
nagios4-common/jammy,now 4.4.6-4 all [installed,automatic]
nagios4-core/jammy,now 4.4.6-4 amd64 [installed,automatic]
nagios4/jammy,now 4.4.6-4 amd64 [installed]
php-common/jammy,now 2:92ubuntu1 all [installed,automatic]
php8.1-cli/jammy-updates,jammy-security,now 8.1.2-1ubuntu2.11 amd64 [installed,automatic]
php8.1-common/jammy-updates,jammy-security,now 8.1.2-1ubuntu2.11 amd64 [installed,automatic]
php8.1-fpm/jammy-updates,jammy-security,now 8.1.2-1ubuntu2.11 amd64 [installed]
php8.1-opcache/jammy-updates,jammy-security,now 8.1.2-1ubuntu2.11 amd64 [installed,automatic]
php8.1-readline/jammy-updates,jammy-security,now 8.1.2-1ubuntu2.11 amd64 [installed,automatic]
php8.1/jammy-updates,jammy-security,now 8.1.2-1ubuntu2.11 all [installed]

Вот мой основной файл nagios.conf, который загружается в каталог /etc/nginx/conf.d/ (который сам указан в файле /etc/nginx/nginx.conf):

upstream php {
        server unix:/var/run/php/php8.1-fpm.sock;
}
upstream fcgiwrap {
        server  unix:/var/run/fcgiwrap.socket;
}
server {
        listen  80;
        server_name     $HOSTNAME;
        return  302     https://$HOSTNAME;
}
server {
        listen  443 ssl;
        server_name     $HOSTNAME;
        ssl_certificate        /etc/ssl/certs/nginx-selfsigned.crt;
        ssl_certificate_key    /etc/ssl/private/nginx-selfsigned.key;
        access_log      /var/log/nginx/nagios.access.log;
        error_log       /var/log/nginx/nagios.error.log info;
        expires         5m;
        root            /usr/share/nagios4/htdocs;
        index           index.php index.html;
        auth_basic      "Restricted Access";
        auth_basic_user_file /etc/nagios4/htpasswd.users;
        
        location /stylesheets {
                alias /etc/nagios4/stylesheets;
        }
        location ~ /nagios4/ {
                location ~ /(\w*\.cgi)$ {
                        include /etc/nginx/fastcgi_params;
                        fastcgi_param AUTH_USER $remote_user;
                        fastcgi_param REMOTE_USER $remote_user;
                        fastcgi_param SCRIPT_FILENAME /usr/lib/cgi-bin/nagios4/$1;
                        fastcgi_pass fcgiwrap;
                }
        }
        
        location ~ \.php$ {
           fastcgi_split_path_info ^(.+?\.php)(/.*)$;
           fastcgi_pass php;
           include /etc/nginx/snippets/fastcgi-php.conf;
           include /etc/nginx/fastcgi_params;
           fastcgi_param SCRIPT_FILENAME /usr/share/nagios4/htdocs$fastcgi_script_name;
        }
        
        # nagiosgraph
        location ~ /nagiosgraph/ {
                alias /usr/local/nagiosgraph/share/;
                location ~ /(\w*\.cgi)$ {
                        include /etc/nginx/fastcgi_params;
                        fastcgi_param SCRIPT_FILENAME /usr/local/nagiosgraph/cgi/$1;
                        fastcgi_param REMOTE_USER $remote_user;
                        fastcgi_param AUTH_USER $remote_user;
                        fastcgi_pass unix:/var/run/fcgiwrap.socket;
                }
        }
}

Вот фрагмент кода fastcgi, который он вызывает:

# regex to split $uri to $fastcgi_script_name and $fastcgi_path
fastcgi_split_path_info ^(.+?\.php)(/.*)$;

# Check that the PHP script exists before passing it
try_files $fastcgi_script_name =404;

# Bypass the fact that try_files resets $fastcgi_path_info
# see: http://trac.nginx.org/nginx/ticket/321
set $path_info $fastcgi_path_info;

fastcgi_param PATH_INFO $path_info;

fastcgi_index index.php;

include fastcgi.conf;
~                        

Вот мой основной файл nginx.conf:

user nginx;
worker_processes 1;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
        worker_connections 1024;
}
http {
        include          /etc/nginx/mime.types;
        default_type application/octet-stream;
        log_format main '$remote_addr - $remote_user [$time_local] "$request" '
                                        '$status $body_bytes_sent "$http_referer" '
                                        '"$http_user_agent" "$http_x_forwarded_for"';
        client_max_body_size 0;
        access_log      /var/log/nginx/access.log main;
        sendfile        on;
#       tcp_nopush      on;
        keepalive_timeout 65;
        gzip on;
        server_tokens off;
        # https://wiki.mozilla.org/Security/Server_Side_TLS
        ssl_session_timeout 1d;
        ssl_session_cache   shared:SSL:50m;
        ssl_session_tickets off;
        ssl_protocols TLSv1.1 TLSv1.2;
        ssl_ciphers   DEFAULT:!RC4:!DH:!DES:!3DES;
#       ssl_ciphers   'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256';
        ssl_prefer_server_ciphers on;
        # OCSP Stapling ---
        # fetch OCSP records from URL in ssl_certificate and cache them
        ssl_stapling on;
        ssl_stapling_verify on;
        resolver 8.8.4.4 8.8.8.8;
        include /etc/nginx/conf.d/*.conf;
}         

Я играл с различными конфигурациями, но до сих пор терпел неудачу на каждом шагу.

Я создал заполненный файл базовой аутентификации, и мне предлагается ввести имя пользователя и пароль для соответствия через:

htpasswd -b -c /etc/nagios4/htpasswd.users nagiosadmin $SOMEPASSWORD

Я следил за ядром nagios, генерирующим ошибку 403, запрещенную, и пытался переместить этот файл htpass.users в /usr/local/nagios/ и установить право собственности на root: nagios, но в данном случае это не имело никакого значения.

Я удалил все конфиги и следил за https://www.nginx.com/resources/wiki/start/topics/examples/phpfcgi/ просто чтобы убедиться, что php-fpm работает, и это выглядит ( ответ с домашней страницы совпадает с ответом гида).

Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
0
0
95
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Проблема с этой конфигурацией заключалась в том, что конфигурация модуля php-fpm по умолчанию (/etc/php/8.1/fpm/pool.d/www.conf) настроена для пользователя www-data.

Этот nginx.conf указывает пользователя с именем «nginx» в качестве текущего пользовательского контекста.

Изменение /etc/php/8.1/fpm/pool.d/www.conf для ссылки на «nginx» вместо «www-data» и перезапуск службы php8.1-fpm (перезапуск systemctl) решило эту проблему.

Другие вопросы по теме