子兮子兮 子兮子兮

No can, but will.

目录
Windows下Nginx整合Tomcat和Jetty并通过两个域名分别访问
/  

Windows下Nginx整合Tomcat和Jetty并通过两个域名分别访问

在实际的网站部署中,可能需要在同一个服务器上同时启动多个服务,比如一个 Tomcat,端口为 8080,和一个 Jetty,端口为 8081。由于域名解析时只能解析到默认的 80 端口,所以这时想要通过两个域名分别访问同一个服务器上的两个不同端口的服务,就需要用到 nginx

Tomcat,Jetty 和 Nginx 是什么这里就再不多说了,百度一下,你就知道。这里只介绍 Nginx 整合两个服务的配置。

首先,需要到 Nginx 官网 下载 Windows 版 的 Nginx,这里使用的是 1.10.2 版。下载完成后直接解压至 D 盘根目录,路径根据自己实际情况决定。

然后找到解压目录中的 conf 目录,这里存放的是 nginx 的配置文件,找到 nginx.conf 文件,用文件编辑器(Notepad++ 等)打开,可以看到有一个默认开启的监听 80 端口的配置,将请求转发到 localhost。此配置可以不用改动,直接在此配置下添加两条 server 配置。

先添加一条 Tomcat 的配置

# Tomcat
server {
listen 80; # 监听 80 端口
server_name itanken.cn www.itanken.cn; # 转发通过此地址访问的请求
if ($host = 'itanken.cn' ) { # 将请求重定向到带有 www 的域名
rewrite ^/(.*) http://www.itanken.cn/1 permanent;
}
location ~ .(js|css|png|gif|jpg|ico|svg|otf|eot|ttf|woff|woff2)$ {
root D:/Tomcat/webapps/ROOT/static; # 将 Tomcat 中的静态资源使用 Nginx 进行缓存
expires 7d; # 缓存 7 天
}
location / {
proxy_pass http://localhost:8080; # 将请求转发到 Tomcat 的 8080 端口
}
}

通过此配置即可将通过域名itanken.cn访问的请求转发到端口为8080的Tomcat上。

再添加一条 Jetty 的配置

#Jetty
server {
listen 80;
server_name itanken.net www.itanken.net; # 转发通过此地址访问的请求
location / {
proxy_pass http://localhost:8081; # 将请求转发到 8081 端口
}
}

通过此配置即可将通过域名itanken.net访问的请求转发到端口为8081的Jetty上。

到这里配置就基本完成了,打开 cmd 窗口,进入 Nginx 根目录,通过命令 start nginx.exe 启动 nginx,然后分别访问两个域名查看效果。

示例:http://www.itanken.cn/http://www.itanken.net/ 这两个域名都是解析到同一个 IP 上的,但是通过 Nginx,转发到了两个不同的服务。

相关参考资料:http://zyjustin9.iteye.com/blog/2017394

nginx 中,应该使用 try_files 来判断文件是否存在

location / {
try_files index.html index.php =404;
}