在 Tomcat 连接器中添加“address=127.0.0.1”后,JIRA 变得无法访问

在 Tomcat 连接器中添加“address=127.0.0.1”后,JIRA 变得无法访问

我在同一台服务器上运行 JIRA 和 Nginx,并安装 Nginx 作为反向代理。从我从各种来源了解到的情况来看,在 server.xml 文件中,我必须添加 address="127.0.0.1" 属性,以便 Tomcat 不会监听外部 IP。但是,一旦我将其添加到我的 8080 和 8443 连接器中,一切就停止工作了,即 JIRA 站点变得无法访问。浏览器显示连接被拒绝/连接超时错误。

这是 Tomcat 的 server.xml 文件配置。

<Connector port="8080" 
address="127.0.0.1" 
maxThreads="150" 
minSpareThreads="25" 
connectionTimeout="20000" 
enableLookups="false" 
maxHttpHeaderSize="8192" 
protocol="HTTP/1.1" 
useBodyEncodingForURI="true" 
acceptCount="100" 
redirectPort="8443" 
disableUploadTimeout="true" 
proxyName=<FQDN> 
proxyPort="80"/>

<Connector port="8443" 
address="127.0.0.1" 
SSLEnabled="true" 
acceptCount="100" 
clientAuth="false" 
connectionTimeout="20000" 
disableUploadTimeout="true" 
enableLookups="false" 
keyAlias=<value> 
keystoreFile=<jks file> 
keystorePass=<password> 
keystoreType="JKS" 
maxHttpHeaderSize="8192" 
maxSpareThreads="75" 
maxThreads="150" 
minSpareThreads="25"  
protocol="org.apache.coyote.http11.Http11Protocol" 
scheme="https" 
secure="true" 
sslProtocol="TLS" 
useBodyEncodingForURI="true"/>

并且 sites-enabled 中的 Nginx 服务器配置链接到 sites-available 文件夹 -

    server {
    listen 80 default_server;
    listen [::]:80 default_server ipv6only=on;
    server_name <FQDN>;
    location / {
    proxy_pass http://127.0.0.1; #I have tried FQDN, real IP, :8080 suffix etc. but the response didn't change
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $host;
}
}

我的方法有什么问题?这主要源于https://confluence.atlassian.com/jirakb/integrating-jira-with-nginx-426115340.html除了添加地址属性。HTTPS 连接器块是从 Atlassian 的标准 SSL 启用说明中派生出来的(我猜它是在我配置它时自动生成的)。

4月21日更新:这是我的 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"';

    access_log  /var/log/nginx/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    #gzip  on;

    include /etc/nginx/conf.d/*.conf;
    include /etc/nginx/sites-enabled/*;
}

4月22日更新 我尝试运行 curl -v FQDN,并在错误日志中收到此消息。终端显示 502 Bad gateway -

connect() failed (111: Connection refused) while connecting to upstream, client: <IP Address>, server: <FQDN>, request: "GET / HTTP/1.1", upstream: "http://<IP>:8080/", host: <FQDN> 

答案1

确保您的 Nginx 代理指向“127.0.0.1”而不是您的服务器/站点的主机名或 IP。

如果这样做,您可能会遇到 Tomcat 连接器在 IPV4 上的问题(由 127.0.0.1 强制),而 Nginx 正尝试在 IPv6 堆栈上访问它。

答案2

如果 nginx 正在运行,但无法连接到其上游服务器(例如 tomcat),那么您将收到 50x 样式的错误,而不是连接被拒绝的错误。

浏览器报告网站拒绝连接。ERR_CONNECTION_REFUSED – Chethan S. 4 月 21 日 15:34

这意味着你根本无法连接到 nginx。你确定它正在运行吗?

解决此问题的最佳方法是查看系统上运行的程序以及端口和 IP 地址。例如:

# lsof | fgrep -e LISTEN | fgrep -e tomcat -e nginx
nginx     25509              root   15u     IPv4           55825524      0t0        TCP *:http (LISTEN)
nginx     25529          www-data   15u     IPv4           55825524      0t0        TCP *:http (LISTEN)
nginx     25530          www-data   15u     IPv4           55825524      0t0        TCP *:http (LISTEN)
nginx     25531          www-data   15u     IPv4           55825524      0t0        TCP *:http (LISTEN)
nginx     25532          www-data   15u     IPv4           55825524      0t0        TCP *:http (LISTEN)

确保您在其中看到 tomcat 和 nginx。

另一种方法是配置防火墙(例如,iptables)以拒绝任何从外部连接到端口 8080 和 8443 的尝试,或者首先只允许外部连接到端口 22 和 80/443。

相关内容