--江上往来人,但爱鲈鱼美。
--君看一叶舟,出没风波里。
在Tomcat中部署应用时,如果你希望通过域名访问而不加端口号(默认HTTP端口80或HTTPS端口443),你通常需要在前端使用一个反向代理服务器(如Nginx或Apache HTTP Server)来进行端口转发和SSL终止。这是因为Tomcat通常不会直接监听80或443端口,而这些端口通常需要超级用户权限才能绑定。
以下是一个使用Nginx作为反向代理服务器的示例配置,将HTTP和HTTPS请求转发到Tomcat的8080或8443端口:
前提条件
- 已经安装并配置好了Tomcat服务器。
- 已经安装并配置好了Nginx服务器。
- 拥有一个可用的域名,并且DNS已经解析到服务器的IP地址。
Nginx配置示例
- 编辑Nginx配置文件(通常是
/etc/nginx/nginx.conf
或/etc/nginx/sites-available/default
)。
XML
server {
listen 80;
server_name yourdomain.com;
location / {
proxy_pass http://localhost:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
server {
listen 443 ssl;
server_name yourdomain.com;
ssl_certificate /path/to/your/certificate.crt;
ssl_certificate_key /path/to/your/private.key;
location / {
proxy_pass http://localhost:8443;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
详细步骤
1.安装Nginx(如果尚未安装):
bash
sudo apt-get update
sudo apt-get install nginx
2.创建SSL证书(可以通过Let's Encrypt免费获取,或购买证书)
bash
sudo apt-get install certbot python3-certbot-nginx
sudo certbot --nginx -d yourdomain.com
按照提示完成证书的申请和安装。
3.编辑Nginx配置文件:
使用你喜欢的文本编辑器(如vim
或nano
)编辑Nginx的配置文件,并添加上面的配置内容。
4.测试Nginx配置:
bash
sudo nginx -t
确保配置没有语法错误。
5.重启Nginx:
bash
sudo systemctl restart nginx
Tomcat配置
确保Tomcat的server.xml
文件中配置了适当的Connector:
XML
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
maxThreads="150" SSLEnabled="true">
<SSLHostConfig>
<Certificate certificateKeystoreFile="conf/localhost-rsa.jks"
certificateKeystorePassword="changeit"
type="RSA" />
</SSLHostConfig>
</Connector>
验证
- 通过浏览器访问
http://yourdomain.com
,确认是否能够正常访问Tomcat应用。 - 通过浏览器访问
https://yourdomain.com
,确认是否能够通过HTTPS正常访问Tomcat应用。
这样配置后,你就可以通过域名访问Tomcat应用而无需指定端口号了。Nginx会处理所有的请求并将其转发到Tomcat的相应端口。