使用Nginx反向代理 让IIS和Tomcat等多个站点一起飞


使用Nginx 让IIS和Tomcat等多个站点一起飞

 

前言:

  养成一个好习惯,解决一个什么问题之后就记下来,毕竟“好记性不如烂笔头”。

  这样也能帮助更多的人 不是吗?

  

  最近闲着没事儿瞎搞,自己在写一个ASP.NET MVC的系统,所以理所当然的 在服务器上搭建了一个IIS。

  可是,学员要做JSP的项目了,涉及一些在线API回调的问题,所以没招,给他们又搭建了一个Tomcat。

 

  那么、问题来了。。

 

  我IIS里面的这些站点,可以使用IIS自带的绑定功能,分别绑定多个域名共享80端口。

  但是,Tomcat呢?肯定不能绑定80了吧?可如果不绑定80。难道我要“http://www.xxx.com:8080”这么访问Tomcat里面的站点吗?!

 

  于是乎,各种解决方案在脑子里想了个遍。甚至修改hosts、使用FastCGI等等都想过了。可我又不想这么玩。唉。

 

  没招,最后想到了Nginx这个神器。因为它 支持反向代理。而且Linux也能用哦~

  

  问:IIS7之后不也支持反向代理了嘛?你这多此一举。

  大哥。我这讲的是Nginx,不要打扰我装X好嘛。。呵呵,开个玩笑。其实装X是次要的,主要还是我服务器想换成Linux的。(说的自己都不信了 哈哈)

 

  废话不多说,开始正文。O(∩_∩)O哈哈~

 

 

目录:

  1. Nginx介绍
  2. 下载&安装
  3. 小试配置Nginx
  4. 最终配置
  5. 启动/停止/重启 Nginx
  6. 结尾

 

 

 

1. Nginx介绍

  如我“前言”所说,在IIS里面,我们搭建多个站点可以使用自带的绑定端口的方式实现。

  但是如果这时候又加一个Tomcat呢?没法绑定80端口了,因为已经被IIS占用了。可是我又不可能“http://www.xxx.com:8080”去访问吧?

 

  当然我们可以像我发过的一篇文章《IIS8 使用FastCGI配置PHP环境支持 过程详解》那样,在IIS中添加PHP的cgi映射,来添加对php的支持。

  JSP也同样可以使用FastCGI。但是我不想这么玩了,个人觉得 老是用IIS没啥技术含量,如果以后还遇到什么东西,不支持FastCGI怎么办呢?

  对吧。你没法改变这个社会,没招,只能改变自己去适应社会的变化。

 

  所以最后就想到了咱们的Nginx。

 

  简单介绍一下,Nginx主要支持反向代理,什么意思呢?

  说白了就是,你把80端口绑定给Nginx,然后通过配置文件告诉它:我访问www.aaa.com域名,你给我把请求转发到www.aaa.com:81上面;我访问www.bbb.com域名,你给我把请求转发到www.bbb.com:8080上面。等等等等。。

 

  这时候大概大家已经明白了我这里为啥用Nginx了吧。呵呵。就是因为这个功能。

 

  当然,如果你认为它只是做代理转发的,那你就错了。

  Nginx除了可以实现反向代理来自定义转发你的请求,它还能通过配置文件实现Session跨域、请求过滤、负载均衡等等等的功能。

 

  详细的介绍和使用,大家可以去官网或自行Google查阅。各种用法,各种介绍。特别详细的。

 

  是不是有点儿意思哈?呵呵。分享一下我这里的IIS+Tomcat的多个站点是怎么弄的吧。

  

 

 

2. 下载&安装Nginx

  进入官网http://nginx.org/,下载Nginx程序文件,最新版本列表如图:

 

  不像其他软件那样,下载还需要注册登录啥的,这个什么都不需要,直接选择版本就可以免费下载。而且程序仅1.xMB大小。

 

  点击版本连接进入后,会让您选择平台Windows还是Linux:

 

  这里我下载的是Windows的1.10.0:

 

  Nginx是绿色解压版的,不需要运行安装程序,直接解压完就能用。

  这里,我将其解压到了D:\Nginx目录了,目录文件如下:

 

  双击运行nginx.exe,只见一DOS界面一闪而过,我特么还以为眼花了呢。再双击。还是一闪而过。

  WTF?!什么鬼?!

 

  按照网上教程里面的剧本儿来说,双击运行后,确实是一闪而过,不过访问http://localhost可以看到Nginx的欢迎界面。

  但是我打开浏览器,访问后,直接找不到服务器。顿时我方了。啥玩意儿?!

 

  机智的我看到了D:\Nginx\logs\error.log错误日志文件,日志内容如下:

1 2016/05/16 23:55:32 [emerg] 6488#7044: bind() to 0.0.0.0:80 failed (10013: An attempt was made to access a socket in a way forbidden by its access permissions)
2 2016/05/16 23:55:32 [emerg] 6488#7044: bind() to 0.0.0.0:80 failed (10013: An attempt was made to access a socket in a way forbidden by its access permissions)
3 2016/05/16 23:55:32 [emerg] 6488#7044: bind() to 0.0.0.0:80 failed (10013: An attempt was made to access a socket in a way forbidden by its access permissions)

 

  很明显,提示绑定当前计算机的80端口失败了。

  我又打开DOS,切换到D:\Nginx,输入nginx.exe,提示错误也是这个。

 

  于是乎,立马想到了IIS。因为如果绑定80端口失败,肯定是80被占用了啊。

  我就把所有网站都停止了,甚至IIS服务都停了,还是不行。

 

  你妹妹的,逼我,查看80端口到底是被谁占用了。

  大家可以使用netstat的DOS命令查看,也可以使用任务管理器中的资源查看器查看,当然如果都不会用,你也可以使用360的网络连接查看器查看。

  找到之后kill结束掉它。

 

  最后发现,不是IIS的问题,因为IIS并不绑定什么80端口,顶多也只是IIS里面的网站绑定的80访问端口罢了。

  罪魁祸首是另一个服务:Web Deploy服务,这个是我安装IIS的时候额外安装的一个东西,为了远程发布部署用的。

  当然,现在并不用,停止服务即可。

 

  然后再回去运行nginx.exe,同样是一闪而过(因为nginx是隐式运行在进程中的),但是http://localhost已经可以访问了。

  Nginx的欢迎界面如下所示:

 

  看到这个界面了,给我激动的,真想抱着媳妇儿狠亲一口。(然而却是单身狗依旧)

 

 

 

3. 小试Nginx

  我打开了IIS,新建了一个站点,域名是www.geeksss.com,绑定的端口是81。

  下面我想使用Nginx,配置之后,通过www.geeksss.com,自动将请求代理转发到www.geeksss.com:81上。

  步骤如下:

  

  之前说过,Nginx只需要设置好配置文件就可以了。

  打开D:\Nginx\conf\nginx.conf配置文件,准备自定义修改一下。

  

  桥豆麻袋、等一下。

  万一一会儿改叉劈了程序报废了改不回去了怎么办?还是先备份一下。哈哈。

  (养成个习惯)

 

  配置文件注释都是英文的,我就不一一介绍了,文章也不太好介绍着每个参数。

  所以我就简单地配置了一项,顺便把主要的注释都翻译过来了,修改后的内容如下:

  nginx.conf 配置实例

 

  可以发现,我修改了里面的“server”配置项,注释已经很明确了,如果还不明白呢可以自行查阅相关文档或留言。

  这里简单介绍一下server配置项中的几个参数:

  1. listen:监听的端口
  2. server_name:当前的配置可以通过什么域名访问
  3. access_log:当前server的日志文件位置
  4. location:配置请求,类似路由的概念
  5. location->proxy_pass:当前请求代理转发到哪
  6. error_page:重定向错误页的位置

 

  我上面的server意思就是:nginx监听80端口的请求,如果是server_name过来的,则代理转发到proxy_pass。

 

  很简单吧?

 

  这样,当我访问www.geeksss.com的时候,实际上是通过Nginx将请求转发到了IIS中的www.geeksss.com:81的站点了。

 

 

 

4. IIS+Tomcat并用

  我搭建了两个Tomcat站点,然后修改Tomcat\conf\server.xml文件,添加了两个Host进行绑定,修改后的server.xml文件如下所示:

  修改后的Tomcat\conf\server.xml 文件

 

  详细的Tomcat配置就不过多介绍了,不属于本篇范围之内。毕竟估计讲详细了,又得来个长篇大论了。。。

 

  只需要在下面修改一下<Host>节点配置就可以了,每个Host对应一个Tomcat站点。

  其中<Host>中的<Alias>表示的是当前<Host>配置的站点绑定的域名。

 

  也就是说,现在我的Tomcat有两个站点:http://ts2121.bdqnbky.com:8080和http://ts2122.bdqnbky.com:8080。

  再加上我的IIS里面其中的两个站点:http://www.geeksss.com:81和http://api.geeksss.com:82两个站点。

  额外再加上我的JetBrains在线注册服务器:http://www.geeksss.com:1996。

  现在一共是五个站点。而且域名都不一样。

 

  下面,配置Nginx,nginx.conf文件配置如下:

 

  nginx.conf 最终的配置

 

 

  可以看到,我配置了四个server,也就对应着每个站点。

 

  其中的listen监听端口都是80。但是server_name,也就是请求进入的域名却不相同。

  然后通过location -> proxy_pass代理转发到了实际的每个站点。

 

  这时,只需要如下访问即可自动跳转到对应的域名不同的各个站点,而且不需要添加任何端口号,因为Nginx自动给你转发过去了:

  http://www.geeksss.com,实际转发:http://www.geeksss.com:81

  http://api.geeksss.com,实际转发:http://api.geeksss.com:82

  http://ts2121.bdqnbky.com,实际转发:http://ts2121.bdqnbky.com:8080

  http://ts2122.bdqnbky.com,实际转发:http://ts2122.bdqnbky.com:8080

  http://www.geeksss.com:2015,实际转发:http://www.geeksss.com:1996

 

  OK。大功告成。

 

 

  

5. 启动/停止/重启 Nginx

  DOS命令即可控制,为了使用方便,大家也可以将Nginx所在目录配置到系统环境变量的path中,方便随时随地通过dos控制。

 

  启动:nginx -s start

  停止:nginx -s stop

  重启:nginx -s reload

 

  其它命令大家可以参阅官网文档,其实暂时主要用到的也就上面这三个命令了。哈哈

 

 

 

6. 结尾

  关于Nginx其他的配置,例如跨域和负载均衡等等,大家可以先把这个玩儿明白了,然后其实就很简单了。

  无非就是修改点儿配置文件而已。

 

  而且Linux里面的用法和这个也是一样的。

 

  等有时间了,我再搞个相应的文章。

 

  

  最后,觉得听懂了,感觉还不错的,记得点赞推荐哦~

  O(∩_∩)O 摸摸哒~

使用Nginx作为反向代理服务器来代理Tomcat和Discuz论坛,可以提高网站的响应速度和安全性。下面是基本的配置步骤: 1. 安装和配置Nginx: - 确保你已经安装了Nginx,并且它正在运行。 - 编辑Nginx配置文件,通常位于`/etc/nginx/nginx.conf`或者`/etc/nginx/sites-available/default`。 - 在相应的server块中设置代理传递规则。 2. 配置代理Tomcat: - 找到或者创建一个server块,用于处理对Tomcat的请求。 - 设置一个location块来匹配需要代理的路径。 - 在location块中使用proxy_pass指令将请求转发到Tomcat服务器的IP地址和端口。 ```nginx server { listen 80; server_name yourdomain.com; location / { proxy_pass http://127.0.0.1:8080; # Tomcat监听的地址和端口 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; } } ``` 3. 配置代理Discuz: - 如果Discuz安装在Tomcat中,配置与上面相同,只是代理的地址和端口需要指向Discuz应用的位置。 - 如果Discuz是独立部署在Nginx下,那么你可能需要在Nginx配置中单独处理Discuz的请求路径,例如: ```nginx server { listen 80; server_name forum.yourdomain.com; location / { root /path/to/discuz; index index.php; try_files $uri $uri/ /index.php?$query_string; } location ~ \.php$ { fastcgi_pass unix:/var/run/php/php7.4-fpm.sock; # PHP-FPM的socket文件路径 fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } } ``` 4. 测试和重启Nginx: - 在修改了配置文件后,使用`nginx -t`命令测试配置文件的正确性。 - 如果没有错误,使用`systemctl reload nginx`或者`service nginx reload`命令重新加载Nginx配置。 - 确保Tomcat和Discuz论坛在Nginx重启后仍然能够正常访问。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值