背景
本人主修的编程语言是 Java 语言,因此最开始接触的 Web 开发也是 JSP 技术。使用 Java 开发的 Web 应用需要部署在专门的服务器程序上运行,比如 Tomcat。但是一般很少会有人将 Tomcat 作为用户直接访问的服务器的,一般都是使用 nginx 或者 Apache 进行反向代理。我使用的是 nginx。nginx 是一个俄罗斯程序员开发的服务器程序,它本身只能提供静态资源的服务,但它的优点在于并发访问量可以达到非常大的水平。
反向代理的优点
反向代理的主要优点是提高并发访问数。单独一个 Tomcat 服务器能提供的并发访问数不高,如果在主机上部署多个 Tomcat 服务器,使用 nginx 进行反向代理,动态调整用户的请求到不同的 Tomcat 服务器(这个过程称为负载均衡),就可以使并发访问量和单个 Tomcat 服务器相比得到成倍的提升。
动静资源分离也常常和反向代理在一起被提起,比如你部署了一个 Java Web 应用,这是一个动态资源,需要 Tomcat 提供服务(由反向代理实现),但你的网站上同时还有其他的比如纯 HTML 的网页、图片等等静态资源,这些静态资源就可以由 nginx 直接提供给访问者,减少了调用 Tomcat 而产生的多余资源消耗,同样静态资源可以获得相当大的一个并发访问量。
可以画一张图来更清晰地表明反向代理的工作流程。
- 用户请求动态资源
- 用户请求静态资源
具体配置方法
配置的方法有很多,我以我自己的实现方法来进行讲解。
首先找到 nginx 的配置文件 nginx.conf。如果是使用 yum 安装的 nginx 那么它的默认路径是在/etc/nginx/中。在该文件中找到:
server {
listen 80;
server_name localhost;
location / {
root /user/share/nginx/html;
index index.html index.htm;
}
……
也有可能和上述内容有些许不同,重点是 listen 80
,只要找到它,就确定了位置。
80 端口一般代表 http 协议,也就是我们在浏览器上输入网址或者 IP 地址时默认使用的访问协议。server_name
用于配置虚拟主机,我们现在暂时用不到。重点在 location
。location 后面代表访问的虚拟目录,/
代表根目录,,也就是直接输入域名或 IP 地址访问的目录,以本地主机为例,就是直接在浏览器里输入 127.0.0.1。在 location 的大括号里面,root 代表的是虚拟目录映射在本地主机上的实际目录,如果是使用 yum 方式安装的 nginx,那么它的默认访问目录是 /user/share/nginx/html
。index 后面代表的是该目录的首页文件,像示例中就设定了首页文件为 index.html 或者 index.htm。
假如我们要用 nginx 反向代理 tomcat,并且希望在浏览器直接输入 主机的IP地址
时访问到 nginx 默认的首页,而输入 主机的IP地址/tomcat
时访问到 tomcat 上的内容,我们就要这样配置。
server {
listen 80;
server_name localhost;
location / {
root /user/share/nginx/html;
index index.html index.htm;
}
location /tomcat {
proxy_pass http://127.0.0.1:8080;
}
……
加上去的内容就相当于告诉 nginx,在用户访问 IP地址/tomcat
时,就将访问请求传递到 8080 端口(因为 tomcat 默认运行在 8080 端口,如果修改过 tomcat 默认运行端口,就将 8080 改成修改后的端口号)。
这样配置完成后,我们就同时实现了动静资源分离和反向代理。直接访问 IP地址
时,nginx 给用户的是静态资源,减小计算资源的消耗,访问 IP地址/tomcat
时则由 tomcat 提供服务,实现了反向代理。
上面讲的是最基本的配置反向代理和动静分离的方法,还有更加高级的方法,比如设置不同的三级域名访问到不同的目录,动静分离特定格式的文件等等。在此我不做展开,大家有兴趣可以去网上寻找其他资料。
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于