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/ {}
。我不明白为什么,但是反向代理现在工作正常。