1.什么是Nginx?
Nginx是一个高性能的自由、开源的HTTP和反向代理服务器,特点是占用内存少,并发性能强。
nginx能干嘛?
- 可以作为IMAP、POP3、SMTP的代理服务器;
- 可以作为HTTP服务器进行网站的发布处理;
- 可以作为反向代理进行负载均衡的实现;
2.Nginx的安装
2.1 将Nginx相关安装包上传到服务器上
[root@localhost nginx-1.12]# ls -l 总用量 2956 -rw-r--r--. 1 root root 981687 12月 21 16:09 nginx-1.12.2.tar.gz -rw-r--r--. 1 root root 2041593 12月 21 16:09 pcre-8.37.tar.gz
nginx-1.12.2.tar.gz
:nginx源码包,用于安装Nginx
pcre-8.37.tar.gz
:Perl库, 是一个用C语言编写的正则表达式函数库 。
2.2 安装pcre
- 解压pcre源码安装包
[root@localhost nginx-1.12]# tar zxf pcre-8.37.tar.gz
- 编译安装pcre
[root@localhost pcre-8.37]# ./configure checking for a BSD-compatible install... /usr/bin/install -c checking whether build environment is sane... yes checking for a thread-safe mkdir -p... /usr/bin/mkdir -p checking for gawk... gawk checking whether make sets $(MAKE)... yes checking whether make supports nested variables... yes checking whether make supports nested variables... (cached) yes checking for style of include used by make... GNU checking for gcc... no checking for cc... no checking for cl.exe... no configure: error: in `/root/nginx-1.12/pcre-8.37': configure: error: no acceptable C compiler found in $PATH See `config.log' for more details
如果出现上述错误,表示我们没有C的编译器,需要安装gcc/gcc-c++(gcc是C的编译器,gcc-c++是C++的编译器)
- 安装gcc和gcc-c++
root@localhost pcre-8.37]# yum install gcc gcc-c++ -y
- 重新编译pcre
[root@localhost pcre-8.37]# ./configure [root@localhost pcre-8.37]# make && make install
./configure:会检查当前系统的相关配置,也可以通过参数指定相关配置参数
make:编译
make install:安装
如果以上操作没有报错,表示编译安装完成
- 测试pcre是否安装成功
#执行pcre-config --version可用回显版本号,则表示pcre安装成功 [root@localhost pcre-8.37]# pcre-config --version 8.37
2.3 安装其他组件
[root@localhost pcre-8.37]# yum install -y make zlib zlib-devel libtool openssl openssl-develb
2.4 安装Nginx
- 解压Nginx源码安装包
[root@localhost nginx-1.12]# tar zxf nginx-1.12.2.tar.gz
- 编译安装Nginx
[root@localhost nginx-1.12]# ls apache-tomcat-7.0.70.tar.gz nginx-1.12.2 nginx-1.12.2.tar.gz pcre-8.37 pcre-8.37.tar.gz [root@localhost nginx-1.12]# cd nginx-1.12.2 [root@localhost nginx-1.12.2]# ls auto CHANGES CHANGES.ru conf configure contrib html LICENSE man README src [root@localhost nginx-1.12.2]# ./configure [root@localhost nginx-1.12.2]# make && make install
./configure:会检查当前系统的相关配置,也可以通过参数指定相关配置参数
make:编译
make install:安装
2.5 启动Nginx,测试Nginx是否安装成功
- 启动Nginx
#/usr/local/nginx:nginx源码安装的默认路径 [root@localhost nginx-1.12.2]# cd /usr/local/nginx/sbin/ #nginx:nginx的二进制文件,用于启动、停止服务、重新加载配置文件等 [root@localhost sbin]# ./nginx
通过ps -aef | grep nginxf发现相关进程已存在
[root@localhost sbin]# ps -aef | grep nginx root 24981 1 0 17:16 ? 00:00:00 nginx: master process ./nginx nobody 24982 24981 0 17:16 ? 00:00:00 nginx: worker process root 24985 9621 0 17:18 pts/1 00:00:00 grep --color=auto nginx
通过netstat -tualnp发现nginx正在监听80端口
访问nginx服务器80端口,测试Nginx是否可以正常访问
如果出现上述情况,则是因为防火墙过滤引起的,此时可以通过增加80端口的规则列表,或者关闭防火墙即可解决。
firewall-cmd:查看防火墙
关于firewall-cmd命令可参考: https://wangchujiang.com/linux-command/c/firewall-cmd.html
[root@localhost sbin]# firewall-cmd --list-all public (active) target: default icmp-block-inversion: no interfaces: ens33 sources: services: dhcpv6-client ssh ports: protocols: masquerade: no forward-ports: source-ports: icmp-blocks: rich rules:
- 解决方法一:添加80端口到防火墙规则列表中
# 添加80端口到防火墙规则中 [root@localhost sbin]# firewall-cmd --permanent --add-port=80/tcp success # 重新载入防火墙,不会中断已经建立的连接 [root@localhost sbin]# firewall-cmd --reload success
- 解决方法二:将防火墙关掉(推荐)
# 停止防火墙 [root@localhost sbin]# systemctl stop firewalld # 禁止防火墙的开机自启 [root@localhost sbin]# systemctl disable firewalld Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service. Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
再次访问nginx服务器80端口,此时Nginx可以正常访问
或者通过curl nginx服务器的ip地址,也可以测试
[root@localhost sbin]# curl 192.168.245.130 <!DOCTYPE html> <html> <head> <title>Welcome to nginx!</title> <style> body { width: 35em; margin: 0 auto; font-family: Tahoma, Verdana, Arial, sans-serif; } </style> </head> <body> <h1>Welcome to nginx!</h1> <p>If you see this page, the nginx web server is successfully installed and working. Further configuration is required.</p> <p>For online documentation and support please refer to <a href="http://nginx.org/">nginx.org</a>.<br/> Commercial support is available at <a href="http://nginx.com/">nginx.com</a>.</p> <p><em>Thank you for using nginx.</em></p> </body> </html>
3.常用命令
注意:nginx的命令操作,默认必须在nginx的安装目录下的sbin目录中操作(可以通过配置环境变量解决)
默认位置在/usr/local/nginx/sbin下如果不知道nginx的目录位置,可以使用whereis命令获取
- 获取nginx文件位置
[root@localhost sbin]# whereis nginx nginx: /usr/local/nginx
- 查看nginx版本信息
[root@localhost sbin]# ./nginx -v nginx version: nginx/1.12.2
- 启动nginx
[root@localhost sbin]# ./nginx
- 关闭nginx
[root@localhost sbin]# ./nginx -s stop
- 重新加载nginx(不需要重启nginx服务器,重新读取nginx.conf配置文件)
[root@localhost sbin]# ./nginx -s reload
4.配置文件解析
nginx的主配置文件位于:/usr/local/nginx/conf/nginx.conf
4.1文件结构
- 全局块
从配置文件开始到events块之间的内容,主要设置一些影响nginx服务器整体运行时的配置指令。
#user nobody; #worker_processes:值越大,可处理的并发数据量也就越多 worker_processes 1; #error_log logs/error.log; #error_log logs/error.log notice; #error_log logs/error.log info; #pid logs/nginx.pid;
- events块
nginx服务器与用户的网络连接配置信息
#worker_connections:nginx支持的最大连接数 events { worker_connections 1024; }
- http块
用于代理、缓存和日志等相关功能和第三方模块的配置。比如我们常说的反向代理、负载均衡等等,都是通过配置http块实现的。http块中又包含http全局块和server块。
http全局块
包含文件引入、MIME-TYPE定义、日志自定义、连接超时时间、单链接请求数上限等内容。
include 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 logs/access.log main; sendfile on; #tcp_nopush on; #keepalive_timeout 0; keepalive_timeout 65; #gzip on;
server块
每个http块可以包含多个server块,每个server块相当于一个虚拟主机。
虚拟主机:可以理解为通过nginx将一个物理的服务器(nginx服务器),通过server块的方式划分为多个虚机服务器对用户提供访问。
server { #server全局块 #配置虚拟主机的监听配置和虚拟主机的名称和IP配置 listen 80; server_name localhost; #charset koi8-r; #access_log logs/host.access.log main; #location块 #根据接收到的请求字符串对虚拟主机名称之外的字符串进行匹配, #对特定的请求进行处理、地址重定向、数据缓存和应答控制等功能 location / { root html; index index.html index.htm; } #error_page 404 /404.html; # redirect server error pages to the static page /50x.html error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } }
5.配置实例
5.1反向代理
什么是反向代理?
反向代理是指以代理服务器来接收来自互联网上的连接请求,然后将请求转发给内部网络上的服务器,并将从内部服务器上得到的结果通过代理服务器返回给来自互联网上请求连接的客户端,此时代理服务器对外的表现形式就是一个反向代理服务器。
比如我们(用户)去租房子(Web服务器),通常情况下都是通过平台(代理服务器)去租。这个时候我们是跟平台去联系的,并不知道房东是谁。还有一种可能是房东委托自己的朋友去管理,这个时候跟我们联系的也不是房东本人,而是他的朋友(代理服务器),这个过程就叫反向代理。而房东的朋友也就承担了“代理服务器”的这个角色。
案例一
需求:
访问
192.168.245.130:80
端口,代理到192.168.245.131:8080
端口
1. 安装JDK(tomcat需要依赖于JDK环境)
JDK是Java语言的软件开发工具包,JDK是整个java开发的核心,它包含了JAVA的运行环境(JVM+Java系统类库)和JAVA工具。
安装JDK,因为Tomcat需要JDK的环境支持
- 将JDK和tomcat上传到服务器。
[root@nginx-02 ~]# ls -l 总用量 196020 -rw-r--r--. 1 root root 9830232 12月 22 15:40 apache-tomcat-8.0.33.zip -rw-r--r--. 1 root root 190890122 12月 22 15:41 jdk-8u171-linux-x64.tar.gz
- 解压
jdk-8u171-linux-x64.tar.gz
到/usr/local
目录中
[root@nginx-02 ~]# tar zxf jdk-8u171-linux-x64.tar.gz -C /usr/local/ [root@nginx-02 jdk1.8.0_171]# pwd /usr/local/jdk1.8.0_171 [root@nginx-02 jdk1.8.0_171]# ls -l 总用量 25964 drwxr-xr-x. 2 10 143 4096 3月 29 2018 bin -r--r--r--. 1 10 143 3244 3月 29 2018 COPYRIGHT drwxr-xr-x. 4 10 143 122 3月 29 2018 db drwxr-xr-x. 3 10 143 132 3月 29 2018 include -rw-r--r--. 1 10 143 5203779 3月 29 2018 javafx-src.zip drwxr-xr-x. 5 10 143 185 3月 29 2018 jre drwxr-xr-x. 5 10 143 245 3月 29 2018 lib -r--r--r--. 1 10 143 40 3月 29 2018 LICENSE drwxr-xr-x. 4 10 143 47 3月 29 2018 man -r--r--r--. 1 10 143 159 3月 29 2018 README.html -rw-r--r--. 1 10 143 424 3月 29 2018 release -rw-r--r--. 1 10 143 21098592 3月 29 2018 src.zip -rw-r--r--. 1 10 143 106782 3月 29 2018 THIRDPARTYLICENSEREADME-JAVAFX.txt -r--r--r--. 1 10 143 145180 3月 29 2018 THIRDPARTYLICENSEREADME.txt
- 编辑
/etc/profile
配置JAVA环境变量,在尾部加入以下内容
# 配置JAVA环境变量 export JAVA_HOME=/usr/local/jdk1.8.0_171 export JRE_HOME=$JAVA_HOME/jre export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH
- 输入javac -version,Java -version看是否有版本回显,有则表示JDK已安装完成
[root@nginx-02 ~]# java -version java version "1.8.0_171" Java(TM) SE Runtime Environment (build 1.8.0_171-b11) Java HotSpot(TM) 64-Bit Server VM (build 25.171-b11, mixed mode) [root@nginx-02 ~]# javac -version javac 1.8.0_171
2. 安装Tomcat
Tomcat 服务器是一个免费的开放源代码的Web 应用服务器, 通常用于部署Java语言编写的网站应用。
- 解压Tomcat到
/usr/local/
目录
#查看该目录下面是否存在tomcat文件 [root@nginx-02 ~]# ls apache-tomcat-8.0.33.zip jdk-8u171-linux-x64.tar.gz #安装unzip工具命令 [root@nginx-02 ~]# yum install -y unzip #使用unzip命令解压tomcat安装文件到/usr/local目录下 [root@nginx-02 ~]# unzip apache-tomcat-8.0.33.zip -d /usr/local/ #进入/usr/local目录 [root@nginx-02 ~]# cd /usr/local/ #查看是否存在解压后的tomcat文件目录 [root@nginx-02 local]# ls apache-tomcat-8.0.33 bin etc games include jdk1.8.0_171 lib lib64 libexec sbin share src #为apache-tomcat目录下的所有文件执行755权限 [root@nginx-02 local]# chmod 755 -R apache-tomcat-8.0.33/ #进入tomcat目录下的bin目录 [root@nginx-02 local]# cd apache-tomcat-8.0.33/bin/ [root@nginx-02 bin]# ls bootstrap.jar catalina-tasks.xml configtest.bat digest.bat setclasspath.sh startup.bat tomcat-native.tar.gz version.bat catalina.bat commons-daemon.jar configtest.sh digest.sh shutdown.bat startup.sh tool-wrapper.bat version.sh catalina.sh commons-daemon-native.tar.gz daemon.sh setclasspath.bat shutdown.sh tomcat-juli.jar tool-wrapper.sh #使用bash命令运行startup.sh脚本,启动tomcat服务器 [root@nginx-02 bin]# bash startup.sh Using CATALINA_BASE: /usr/local/apache-tomcat-8.0.33 Using CATALINA_HOME: /usr/local/apache-tomcat-8.0.33 Using CATALINA_TMPDIR: /usr/local/apache-tomcat-8.0.33/temp Using JRE_HOME: /usr/local/jdk1.8.0_171/jre Using CLASSPATH: /usr/local/apache-tomcat-8.0.33/bin/bootstrap.jar:/usr/local/apache-tomcat-8.0.33/bin/tomcat-juli.jar Tomcat started. #监测logs目录下catalina.out文件的日志内容,查看是否有报错信息,没有则表示启动成功 [root@nginx-02 bin]# tail -100f ../logs/catalina.out
看到以上内容表示tomcat已成功启动
- 访问tomcat服务器(192.168.245.131),浏览器显示以下内容,表示tomcat可以正常访问
如果内容无法正常显示,一般为防火墙问题,执行下面代码,重新刷新访问即可
#将8080端口加入防火墙规则列表 [root@nginx-02 bin]# firewall-cmd --add-port=8080/tcp --permanent success #重新载入防火墙配置文件 [root@nginx-02 bin]# firewall-cmd --reload success
3. 配置Nginx反向代理
说明: 主机nginx-01为nginx服务器 IP:192.168.245.130 主机nginx-02为Tomcat服务器 IP:192.168.245.131 浏览器访问主机nginx-01(192.168.245.130)80端口,代理到主机nginx-02(192.168.245.131)8080端口,浏览器显示nginx-02(192.168.245.131)的tomcat内容,表示反向代理成功
- 编辑nginx.conf主配置文件
vim /usr/local/nginx/conf/nginx.conf
#配置server,可以理解为一个虚拟主机 server { #监听端口 listen 80; #监听主机 server_name 192.168.245.130; #路径位置 location / { root html; index index.html index.htm; #被代理的服务器,tomcat服务器地址 proxy_pass http://192.168.245.131:8080/; } }
- 重新读取nginx.conf配置文件,使配置生效
[root@nginx-01 sbin]# ls nginx [root@nginx-01 sbin]# ./nginx -s reload
访问nginx-01(192.168.245.130),查看浏览器效果
案例二
需求:
访问
192.168.245.130/house
代理到192.168.245.131:8080/house
访问
192.168.245.130/food
代理到192.168.245.132:8090/food
nginx-02、nginx-03安装Tomcat和JDK
这个在案列一已经详细说明了,在此不再重复。
在nginx-02、nginx-03配置站点目录
- nginx-02(host:192.168.245.131:8080)
- nginx-03(host:192.168.245.132:8090)
如果是在同服务器部署多个Tomcat,为了避免端口冲突,是需要修改Tomcat的对外访问端口8080;
如果是在不同的服务器部署Tomcat,就不会存在端口的冲突问题,那么端口也就可以不用修改了,当然如果你想修改,也是可以的;
- 修改nginx-03的Tomcat服务端口号
[root@nginx-03 conf]# pwd /usr/local/apache-tomcat-8.0.33-8090/conf [root@nginx-03 conf]# vim server.xml
- 启动nginx-02、nginx-03的Tomcat服务
nginx-02
nginx-03
配置nginx反向代理
- 编辑nginx.conf文件,添加代理配置
server { # 监听端口 listen 80; # 表示监听本地主机,建议写Ip地址 server_name localhost; #charset koi8-r; #access_log logs/host.access.log main; # 当请求的url中包含house的内容时,代理到http://192.168.245.131:8080/house站点中 location ~ /house { proxy_pass http://192.168.245.131:8080; } # 当请求的url中包含food的内容时,代理到http://192.168.245.132:8090/food站点中 location ~ /food { proxy_pass http://192.168.245.132:8090; } }
- location指令说明
语法:
location [= | ~ | ~* | ^~ | ^~] uri { }
- =:用于不含正则表达式的uri前,要求请求字符串与uri严格匹配,如果匹配成功,就停止继续向下搜索并立即处理该请求。
- ~:用于表示uri包含正则表达式,并且区分大小写
- ~*:用于表示uri包含正则表达式,并且不区分大小写
- ^~:用于不含正则表达式的uri前,要求nginx服务器找到标识uri和请求字符串匹配度最高的location后,立即使用此location处理请求,而不再使用location块中的正则uri和请求字符串做匹配。
**注意:如果uri包含正则表达式,则必须要有~或者~*标识。**
- 重新加载
nginx.conf
配置文件,使配置生效
[root@nginx-01 sbin]# ./nginx -s reload
- 效果展示
- 访问
192.168.245.130/house
返回192.168.245.131:8080/house
- 访问
192.168.245.130/food
返回192.168.245.132:8090/food
5.2负载均衡
什么是负载均衡?
负载平衡(Load balancing)是一种计算机技术,用来在多个计算机(计算机集群)、网络连接、CPU、磁盘驱动器或其他资源中分配负载,以达到最优化资源使用、最大化吞吐率、最小化响应时间、同时避免过载的目的。 使用带有负载平衡的多个服务器组件,取代单一的组件,可以通过冗余提高可靠性。负载平衡服务通常是由专用软件和硬件来完成。 主要作用是将大量作业合理地分摊到多个操作单元上进行执行,用于解决互联网架构中的高并发和高可用的问题。
引用于《维基百科》
举个例子:比如某饭店为了提升饭店的服务能力,饭店可能会雇佣多个厨师,而这些厨师就组成了一个厨师集群。而当用户在店内点菜的时候,就需要一个专业人员能够把所有客户的菜单均匀的分配给店内的厨师。这样才能最大程度的提升饭店的服务能力。
nginx实现负载均衡配置
需求:访问nginx-01(192.168.245.130:80)将流量均衡到nginx-02(192.168.245.131:8080)和nginx-03(192.168.245.132:8080)
- 配置nginx-02(192.168.245.131:8080)
- 配置nginx-03(192.168.245.132:8080)
- 配置nginx-01(192.168.245.130:80)nginx负载均衡
upstream tomcatserver{ server 192.168.245.131:8080; server 192.168.245.132:8080; } server { listen 80; server_name localhost; #charset koi8-r; #access_log logs/host.access.log main; location / { proxy_pass http://tomcatserver; } #error_page 404 /404.html; # redirect server error pages to the static page /50x.html # error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } }
- 效果展示
nginx负载均衡策略
nginx为了方便我们解决负载问题,提供了几种负载均衡的算法模式,使我们可以根据需求场景去选择负载均衡的方式。
- 轮询策略(默认算法)
upstream tomcatserver{ server 192.168.245.131:8080; server 192.168.245.132:8080; server 192.168.245.133:8080; server 192.168.245.134:8080; }
轮询算法是nginx实现负载均衡的默认算法。轮询策略按照顺序选择组内(upstream模块配置的服务器节点)服务器处理请求。如果一个服务器在处理请求的过程中出现错误,请求会被按照顺序依次交给组内的下一个服务器进行处理,依次类推,直到返回正常的响应为止。如果所有的组内服务器都出现错误,则返回最后一个服务器的处理结果。
- weight策略(加权轮询)
upstream tomcatserver{ server 192.168.245.131:8080 weight=5; server 192.168.245.132:8080 weight=3; server 192.168.245.133:8080; server 192.168.245.134:8080; }
为upstream组内的服务器设置权重,权重值高的服务器被优先用于处理请求。此时组内服务器的选择策略为加权轮询。组内所有服务器的权重值默认为1,即采用轮询的方式处理请求。
- ip_hash策略
upstream tomcatserver{ ip_hash; server 192.168.245.131:8080; server 192.168.245.132:8080; server 192.168.245.133:8080; server 192.168.245.134:8080; }
ip_hash用于实现会话保持功能,将某个客户端的多次请求重定向到组内同一台服务器上,保证客户端与服务器之间建立稳定的会话。只有当服务器处于无效的状态时(down机),客户端请求才会被下一个服务器接收和处理。注意:使用ip_hash后不能使用weight;
- fair(第三方算法)
upstream tomcatserver{ fair; server 192.168.245.131:8080; server 192.168.245.132:8080; server 192.168.245.133:8080; server 192.168.245.134:8080; }
按照upstream组内服务器的响应时间来分配请求,响应时间短的优先分配,需要第三方模块的支持。
5.3动静分离
什么是动静分离?
谈动静分离之前,先说一下什么是动,什么是静。
一般网站可以分为静态网站、动态网站。静态网站是指不需要去访问数据库资源的网站,通常称为静态网站。需要通过去查询数据库获取数据库的,我们一般称为动态网站,动态网站可不是网站上可以动的动画效果的网站就是动态网站哈。
- 动静分离前
- 浏览器去请求Web服务器Tomcat,tomcat上存放着网站运行时,需要使用到的静态资源文件如图片、CSS样式文件、JavaScript脚本文件、.html文件和动态脚本文件JSP。
- Tomcat收到用户请求后,如果请求的JSP需要访问数据库的,会去数据库查询相关数据,并进行相关的逻辑处理,处理完成后将执行结果生成html通过Tomcat返回给浏览器。
- 浏览器拿到tomcat返回的html进行渲染,遇到图片,CSS、JS脚本资源时,浏览器异步请求tomcat服务器获取文件,tomcat返回浏览器请求的资源文件,浏览器继续渲染,迭代此操作,直到html页面所需的资源全部加载完成。
- 浏览器展示渲染效果,也就是用户看到的浏览器渲染后的页面。
- 动静分离后
- 浏览器请求Nginx服务器,nginx服务器上存放着静态资源,然后nginx直接把用户请求的静态资源响应给浏览器,浏览器拿到.html文件后,进行渲染。渲染过程中如果还需要加载其他的静态资源就再去请求nginx服务器获取,迭代此操作。
- 浏览器当需要请求接口时,先去请求nginx服务器,nginx看到这是后端的接口地址时,把请求通过反向代理发送给后端的tomcat服务器。
- tomcat服务器处理来自nginx发送的请求,当tomcat需要去查询数据库时,再去访问数据库。tomcat把nginx发来的接口地址进行解析处理,处理完成后,生成.html/json内容,返回给Nginx服务器,nginx服务器再把结果响应给浏览器。
- 浏览器拿到nginx响应的内容进行渲染。
- 浏览器展示渲染效果,也就是用户看到的浏览器渲染后的页面。
动静分离的好处
- api接口服务化:动静分离之后,后端应用更为服务化,只需要通过提供api接口即可,可以为多个功能模块甚至是多个平台的功能使用,可以有效的节省后端人力,更便于功能维护。
- 前后端开发并行:前后端只需要关心接口协议即可,各自的开发相互不干扰,并行开发,并行自测,可以有效的提高开发时间,也可以有些的减少联调时间 。
- 减轻后端服务器压力,提高静态资源访问速度:后端不用再将模板渲染为html返回给用户端,且静态服务器可以采用更为专业的技术提高静态资源的访问速度。
- 动静分离后, 即使动态服务不可用, 但静态资源不会受到影响
nginx实现动静分离配置
为了更好的模拟动静分离的效果。我们的需求如下:
- 访问nginx(192.168.245.130)时,通过nginx代理访问我们的后端tomcat。
- 访问静态资源(192.168.245.130/index.html)时,访问nginx上的静态资源站点
- tomcat做tomcat集群,避免因单台tomcat死掉后,造成其他tomcat服务不可用。
- tomcat全部死掉,静态页面也可以正常访问。
配置tomcat服务,使用tomcat7和tomcat8用来模拟后端
- tomcat7(:192.168.245.132:8080)
- tomcat-8(192.168.245.131:8080)
配置静态服务
nginx的源码安装默认静态资源目录一般在
/usr/local/nginx/html
目录下,在目录下默认存放着Nginx的欢迎页面文件
- 在nginx的配置文件中配置静态资源
location ~ .*\.(html|htm|gif|jpg|jpeg|bmp|png|ico|js|css)$ { root /usr/local/nginx/html/food; }
root指令用于指定资源目录的位置,这里的意思是匹配到请求的uri中如果包含html、gif、jpg、png等后缀的静态资源文件时,去访问
/usr/local/nginx/html/food
这个目录下的资源。
- 测试访问nginx静态资源(192.168.245.130:80/index.html)
- 在nginx中配置动态服务
拦截所有非静态的资源请求,通过proxy_pass发送到名为tomcatserver的upstream模块进行负载均衡(默认使用轮询策略),将请求转发给后端tomcat服务器,实现负载和tomcat集群。
至此,基本的动静分离配置就完成了。
说明:
如果此时访问通过nginx访问后端服务如果发生如下情况属于正常现象。
原因如下:访问后端服务时,因为需要加载静态资源文件,就触发了静态资源的访问规则,这个时候就会去/usr/local/nginx/html/food
目录下面找,但实际上tomcat所需要的静态资源并不在该目录下,所以就找不到该资源,页面样式资源文件找不到报404也就不足为奇了。但是后端服务是可以正常访问的。通常情况下动静分离后的网站架构,后端只提供接口的访问服务,这里只是为了演示效果。
来源:https://www.cnblogs.com/youngzhao/p/12150628.html