NGINX+TOMCAT动静分离实验
一、动静分离原理
服务端接收来自客户端的请求中,有一部分是静态资源的请求,例如 html、css、js
和图片资源等等。有一部分是动态数据的请求。因为 Tomcat 处理静态资源的速度比较慢,
所以可以考虑把所有静态资源独立开来,交给处理静态资源更快的服务器(例如 Nginx)处
理,而把动态请求交给 Tomcat 处理。 在机器上同时安装了 Nginx 和 Tomcat,把所有的静态
资源都放置在 Nginx的 webroot 目录下面,把动态请求的程序都放在 Tomcat 的目录下面。
当客户端访问服务端的时候,如果是静态资源的请求,就直接到 Nginx 的目录下面获取资源。
如果是动态资源的请求,Nginx 利用反向代理的原理,把请求转发给 Tomcat 进行处理,这样
就实现了动静分离,提高了服务器处理请求的性能。
二、Web服务搭建
1)Nginx搭建
2)Tomcat搭建
由于Tomcat是基于java语言编写的,所以要搭建JDK环境
JDK官网下载地址:https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html
Tomcat官网下载地址:https://tomcat.apache.org/download-90.cgi
rz //传输 jdk-8u91-linux-x64.tar.gz
rz //传输 apache-tomcat-9.0.36.tar.gz
tar zxvf jdk-8u91-linux-x64.tar.gz -C /usr/local/
vi /etc/profile //末行插入
export JAVA_HOME=/usr/local/jdk1.8.0_91
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH
source /etc/profile
java -version //查看到版本信息JDK就搭建好了
tar zxvf apache-tomcat-9.0.36.tar.gz -C /usr/local/
mv /usr/local/apache-tomcat-9.0.36/ /usr/local/tomcat
cd /usr/local/tomcat
/usr/local/tomcat/bin/startup.sh
netstat -anpt | grep 8080 //过滤出Tomcat的默认端口,就搭建完成了
vi /usr/local/nginx/conf/nginx.conf
在server内嵌套将动态.jsp请求发送到Tomcat服务器上
location ~ .*.jsp$ {
proxy_pass http://192.168.80.38:8080;
Host $host;
}
vi /usr/local/nginx/html/index.html //在Nginx中编写静态网页
vi /usr/local/tomcat/webapps/test/index.jsp //在Tomcat中编写动态网页
systemctl restart nginx //重启nginx使更改的配置文件生效
对了,要使用图片记得给图片权限,chmod 777 *.jpg
这样动静分离实验就成功了,但是我是基于不同端口,只用了1台Linux,一般web服务都是装在不同的服务器上,一台服务器做动静分离也没必要。
然后将图片放在Nginx下的网页根目录/usr/local/nginx/html/下创建与Tomcat相同项目名test
直接在Tomcat下的测试页面进行引用,如下
华丽的分割线
********************************************************************************************************************************
最后,附Nginx配置文件,以防大家配置文件弄错,记得将IP改成自己的。
#user nobody;
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 {
worker_connections 1024;
}
http {
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 {
listen 80;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
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;
}
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
# proxy_pass http://127.0.0.1;
#}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
#location ~ \.php$ {
# root html;
# fastcgi_pass 127.0.0.1:9000;
# fastcgi_index index.php;
# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
# include fastcgi_params;
#}
location ~ .*.jsp$ {
proxy_pass http://192.168.80.38:8080;
proxy_set_header Host $host;
}
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|css)$ {
expires 30d;
}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
# deny all;
#}
}
# another virtual host using mix of IP-, name-, and port-based configuration
#
#server {
# listen 8000;
# listen somename:8080;
# server_name somename alias another.alias;
# location / {
# root html;
# index index.html index.htm;
# }
#}
# HTTPS server
#
#server {
# listen 443 ssl;
# server_name localhost;
# ssl_certificate cert.pem;
# ssl_certificate_key cert.key;
# ssl_session_cache shared:SSL:1m;
# ssl_session_timeout 5m;
# ssl_ciphers HIGH:!aNULL:!MD5;
# ssl_prefer_server_ciphers on;
# location / {
# root html;
# index index.html index.htm;
# }
#}
}