我在同一台服务器上运行 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。