尚硅谷Nginx教程由浅入深(一套打通丨初学者也可掌握)
文章目录- 第 1 章 Nginx 简介
- 1.1 Nginx 概述
- 1.2 Nginx 作为 web 服务器
- 1.3 正向代理
- 1.4 反向代理
- 1.5 负载均衡
- 1.6 动静分离
- 第 2 章 Nginx 安装
- 2.1 进入 nginx 官网,下载
- 2.2 安装 nginx
- 第 3 章 nginx 常用的命令和配置文件
- 3.1 nginx 常用的命令:
- 其他命令
- 3.2 nginx.conf 配置文件
- 第一部分:全局块 (最大进程数)
- 第二部分:events 块(进程的最大连接数)
- 第三部分:http 块(配置最频繁的部分)
- ①、http 全局块
- ②、server 块
- 1、全局 server 块
- 2、location 块
- 第 4 章 nginx 配置实例-反向代理
- 4.1 反向代理实例一
- 4.1.1 实验代码
- 1) 启动一个 tomcat,浏览器地址栏输入 127.0.0.1:8080,出现如下界面
- 2) 通过修改本地 host 文件,将 www.123.com 映射到 127.0.0.1
- 3) 在 nginx.conf 配置文件中增加如下配置
- 我的实现
- 4.3 反向代理实例二
- 4.3.1 实验代码
- location 指令说明
- 我的实现
Nginx (“engine x”) 是一个高性能的 HTTP 和反向代理服务器,特点是占有内存少,并发能
力强,事实上 nginx 的并发能力确实在同类型的网页服务器中表现较好,中国大陆使用 nginx
网站用户有:百度、京东、新浪、网易、腾讯、淘宝等
Nginx 可以作为静态页面的 web 服务器,同时还支持 CGI 协议的动态语言,比如 perl、php
等。但是不支持 java。Java 程序只能通过与 tomcat 配合完成。Nginx 专为性能优化而开发,
性能是其最重要的考量,实现上非常注重效率 ,能经受高负载的考验,有报告表明能支持高
达 50,000 个并发连接数。
https://lnmp.org/nginx.html
Nginx 不仅可以做反向代理,实现负载均衡。还能用作正向代理来进行上网等功能。
正向代理:如果把局域网外的 Internet 想象成一个巨大的资源库,则局域网中的客户端要访
问 Internet,则需要通过代理服务器来访问,这种代理服务就称为正向代理。
反向代理,其实客户端对代理是无感知的,因为客户端不需要任何配置就可以访问,我们只
需要将请求发送到反向代理服务器,由反向代理服务器去选择目标服务器获取数据后,再返
回给客户端,此时反向代理服务器和目标服务器对外就是一个服务器,暴露的是代理服务器
地址,隐藏了真实服务器 IP 地址。
客户端发送多个请求到服务器,服务器处理请求,有一些可能要与数据库进行交互,服
务器处理完毕后,再将结果返回给客户端。
这种架构模式对于早期的系统相对单一,并发请求相对较少的情况下是比较适合的,成
本也低。但是随着信息数量的不断增长,访问量和数据量的飞速增长,以及系统业务的复杂
度增加,这种架构会造成服务器相应客户端的请求日益缓慢,并发量特别大的时候,还容易
造成服务器直接崩溃。很明显这是由于服务器性能的瓶颈造成的问题,那么如何解决这种情
况呢?
我们首先想到的可能是升级服务器的配置,比如提高 CPU 执行频率,加大内存等提高机
器的物理性能来解决此问题,但是我们知道摩尔定律的日益失效,硬件的性能提升已经不能
满足日益提升的需求了。最明显的一个例子,天猫双十一当天,某个热销商品的瞬时访问量
是极其庞大的,那么类似上面的系统架构,将机器都增加到现有的顶级物理配置,都是不能
够满足需求的。那么怎么办呢?
上面的分析我们去掉了增加服务器物理配置来解决问题的办法,也就是说纵向解决问题
的办法行不通了,那么横向增加服务器的数量呢?这时候集群的概念产生了,单个服务器解
决不了,我们增加服务器的数量,然后将请求分发到各个服务器上,将原先请求集中到单个
服务器上的情况改为将请求分发到多个服务器上,将负载分发到不同的服务器,也就是我们
所说的负载均衡(讲得很通俗易懂啊!)
为了加快网站的解析速度,可以把动态页面和静态页面由不同的服务器来解析,加快解析速
度。降低原来单个服务器的压力
http://nginx.org/(老师装的1.12.2的版本)
第一步,安装 pcre(如果不装这个后面执行Nginx ./configure时会报错)
perl语言兼容正则表达式,是一个用C语言编写的正则表达式函数库
我当前用到的是用来做Nginx的HTTP Rewrite 模块
安装Nginx而且用到Rewrite功能,如果没有装pcre,会报缺少PCRE library
wget http://downloads.sourceforge.net/project/pcre/pcre/8.37/pcre-8.37.tar.gz
解压文件,
解压命令是:
tar -zxvf
./configure 完成后,回到 pcre 目录下执行 make,
再执行 make install(编译并且安装)
验证安装是否成功同时验证版本:pcre-config --version
root@ubuntu:/home/arnold/Arnold_test/20211023_Nginx/pcre-8.37# pcre-config --version 8.37
第二步,安装 openssl
第三步,安装 zlib
yum -y install make zlib zlib-devel gcc-c++ libtool openssl openssl-devel
我是ubuntu呀,没法用yum,只能搜索ubuntu的安装方法了
安装zlib和zlib-devel:apt install zlib1g-dev
参考文章:ubuntu16.04安装zlib
安装openssl和openssl-devel:(貌似这个不用安装也行)
apt install openssl apt install libssl-dev
参考文章:Ubuntu14.04下 安装OpenSSL 部署腾讯云免费版DV SSL证书
第四步,安装 nginx
1、 解压缩 nginx-xx.tar.gz 包。
2、 进入解压缩目录,执行./configure。
3、 make && make install
然后可以发现nginx被安装在这:
然后启动nginx:
[root@ubuntu /usr/local/nginx/sbin]38# ./nginx
发现nginx安装目录多了好多临时文件:
查看nginx进程:
[root@ubuntu /usr/local/nginx/sbin]41# ps -ef | grep nginx root 12185 1382 0 09:06 ? 00:00:00 nginx: master process ./nginx nobody 12186 12185 0 09:06 ? 00:00:00 nginx: worker process root 12212 2172 0 09:09 pts/2 00:00:00 grep --color=auto nginx
然后我们在windows上访问ubuntu 的ip,就可以进到nginx页面
如果看不到上面的页面,可能是防火墙原因,要进行以下设置:(但是我ubuntu直接就能访问到)
查看开放的端口号
firewall-cmd --list-all
(我运行说我没安装firewall-cmd,让我用apt install firewalld安装一下)
[arnold@ubuntu /usr/local/nginx/conf]4$ firewall-cmd --list-all The program 'firewall-cmd' is currently not installed. You can install it by typing: sudo apt install firewalld
然后重新运行上面命令:
[root@ubuntu /usr/local/nginx/conf]4# firewall-cmd --list-all public (default, active) interfaces: ens33 sources: services: dhcpv6-client ssh ports: protocols: masquerade: no forward-ports: icmp-blocks: rich rules:
怎么跟老师的不太一样?
设置开放的端口号
firewall-cmd --add-service=http --permanent
sudo firewall-cmd --add-port=80/tcp --permanent
重启防火墙
firewall-cmd --reload
然后再用前面查看防火墙list命令,发现跟老师的差不多了:
[root@ubuntu /usr/local/nginx/sbin]23# firewall-cmd --list-all public (default, active) interfaces: ens33 sources: services: dhcpv6-client http ssh ports: 80/tcp protocols: masquerade: no forward-ports: icmp-blocks: rich rules:第 3 章 nginx 常用的命令和配置文件 3.1 nginx 常用的命令:
(1)启动命令
在/usr/local/nginx/sbin 目录下执行 ./nginx
(2)关闭命令
在/usr/local/nginx/sbin 目录下执行 ./nginx -s stop
(3)重新加载命令
在/usr/local/nginx/sbin 目录下执行 ./nginx -s reload
(重新加载配置文件nginx.conf)
(4)查看版本号
[root@ubuntu /usr/local/nginx/sbin]26# ./nginx -v nginx version: nginx/1.12.2其他命令
nginx -s reopen #重启Nginx nginx -s reload #重新加载Nginx配置文件,然后以优雅的方式重启Nginx nginx -s stop #强制停止Nginx服务 nginx -s quit #优雅地停止Nginx服务(即处理完所有请求后再停止服务) nginx -t #检测配置文件是否有语法错误,然后退出 nginx -?,-h #打开帮助信息 nginx -v #显示版本信息并退出 nginx -V #显示版本和配置选项信息,然后退出 nginx -t #检测配置文件是否有语法错误,然后退出 nginx -T #检测配置文件是否有语法错误,转储并退出 nginx -q #在检测配置文件期间屏蔽非错误信息 nginx -p prefix #设置前缀路径(默认是:/usr/share/nginx/) nginx -c filename #设置配置文件(默认是:/etc/nginx/nginx.conf) nginx -g directives #设置配置文件外的全局指令 killall nginx #杀死所有nginx进程3.2 nginx.conf 配置文件
nginx 安装目录下,其默认的配置文件都放在这个目录的 conf 目录下,而主配置文件
nginx.conf 也在其中,后续对 nginx 的使用基本上都是对此配置文件进行相应的修改
#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;
#}
# 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;
# }
#}
}
配置文件中有很多#, 开头的表示注释内容,我们去掉所有以 # 开头的段落,精简之后的
内容如下:
#全局块
worker_processes 1;
#events块
events {
worker_connections 1024;
}
#http块
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 80;
server_name localhost;
location / {
root html;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
根据上述文件,我们可以很明显的将 nginx.conf 配置文件分为三部分:
第一部分:全局块 (最大进程数)从配置文件开始到 events 块之间的内容,主要会设置一些影响 nginx 服务器整体运行的配置指令,主要包括配置运行 Nginx 服务器的用户(组)、允许生成的 worker process 数,进程 PID 存放路径、日志存放路径和类型以及配置文件的引入等。
比如上面第一行配置的:
这是 Nginx 服务器并发处理服务的关键配置,worker_processes 值越大,可以支持的并发处理量也越多,但是会受到硬件、软件等设备的制约
比如上面的配置:
events 块涉及的指令主要影响 Nginx 服务器与用户的网络连接,常用的设置包括是否开启对多 work process 下的网络连接进行序列化,是否允许同时接收多个网络连接,选取哪种事件驱动模型来处理连接请求,每个 work process 可以同时支持的最大连接数等。
上述例子就表示每个 work process 支持的最大连接数为 1024.
这部分的配置对 Nginx 的性能影响较大,在实际中应该灵活配置。
第三部分:http 块(配置最频繁的部分)
这算是 Nginx 服务器配置中最频繁的部分,代理、缓存和日志定义等绝大多数功能和第三方模块的配置都在这里。
需要注意的是:http 块也可以包括 http 全局块、server 块。
http 全局块配置的指令包括文件引入、MIME-TYPE 定义、日志自定义、连接超时时间、单链接请求数上限等。
②、server 块这块和虚拟主机有密切关系,虚拟主机从用户角度看,和一台独立的硬件主机是完全一样的,该技术的产生是为了节省互联网服务器硬件成本。
每个 http 块可以包括多个 server 块,而每个 server 块就相当于一个虚拟主机。
而每个 server 块也分为全局 server 块,以及可以同时包含多个 locaton 块。
最常见的配置是本虚拟机主机的监听配置和本虚拟主机的名称或 IP 配置。
2、location 块一个 server 块可以配置多个 location 块。
这块的主要作用是基于 Nginx 服务器接收到的请求字符串(例如 server_name/uri-string),对虚拟主机名称(也可以是 IP 别名)之外的字符串(例如 前面的 /uri-string)进行匹配,对特定的请求进行处理。地址定向、数据缓存和应答控制等功能,还有许多第三方模块的配置也在这里进行。
实现效果:使用 nginx 反向代理,访问 www.123.com 直接跳转到 127.0.0.1:8080
4.1.1 实验代码 1) 启动一个 tomcat,浏览器地址栏输入 127.0.0.1:8080,出现如下界面 2) 通过修改本地 host 文件,将 www.123.com 映射到 127.0.0.1
配置完成之后,我们便可以通过 www.123.com:8080 访问到第一步出现的 Tomcat 初始界
面。那么如何只需要输入 www.123.com 便可以跳转到 Tomcat 初始界面呢?便用到 nginx
的反向代理。
如上配置,我们监听 80 端口,访问域名为 www.123.com,不加端口号时默认为 80 端口,故
访问该域名时会跳转到 127.0.0.1:8080 路径上。在浏览器端输入 www.123.com 结果如下:
- 把老师提供的tomcat弄到虚拟机里
- 然后安装java,我在这参考的:在Ubuntu 16.04如何安装Java使用apt-get的
sudo apt install default-jre
- 查看java版本
[root@ubuntu /home/arnold/Arnold_test/20211023_Nginx]4# java -version openjdk version "1.8.0_292" OpenJDK Runtime Environment (build 1.8.0_292-8u292-b10-0ubuntu1~16.04.1-b10) OpenJDK 64-Bit Server VM (build 25.292-b10, mixed mode)
- 然后进入到tomcat中运行文件,启动tomcat
./startup.sh
[root@ubuntu /home/arnold/Arnold_test/20211023_Nginx/apache-tomcat-7.0.70/bin]10# ./startup.sh Using CATALINA_base: /home/arnold/Arnold_test/20211023_Nginx/apache-tomcat-7.0.70 Using CATALINA_HOME: /home/arnold/Arnold_test/20211023_Nginx/apache-tomcat-7.0.70 Using CATALINA_TMPDIR: /home/arnold/Arnold_test/20211023_Nginx/apache-tomcat-7.0.70/temp Using JRE_HOME: /usr Using CLASSPATH: /home/arnold/Arnold_test/20211023_Nginx/apache-tomcat-7.0.70/bin/bootstrap.jar:/home/arnold/Arnold_test/20211023_Nginx/apache-tomcat-7.0.70/bin/tomcat-juli.jar Tomcat started.
- 查看tomcat启动后的日志文件
tail -f catalina.out
[root@ubuntu /home/arnold/Arnold_test/20211023_Nginx/apache-tomcat-7.0.70/logs]13# tail -f catalina.out Oct 25, 2021 7:58:56 AM org.apache.catalina.startup.HostConfig deployDirectory INFO: Deploying web application directory /home/arnold/Arnold_test/20211023_Nginx/apache-tomcat-7.0.70/webapps/examples Oct 25, 2021 7:58:56 AM org.apache.catalina.startup.HostConfig deployDirectory INFO: Deployment of web application directory /home/arnold/Arnold_test/20211023_Nginx/apache-tomcat-7.0.70/webapps/examples has finished in 159 ms Oct 25, 2021 7:58:56 AM org.apache.coyote.AbstractProtocol start INFO: Starting ProtocolHandler ["http-bio-8080"] Oct 25, 2021 7:58:56 AM org.apache.coyote.AbstractProtocol start INFO: Starting ProtocolHandler ["ajp-bio-8009"] Oct 25, 2021 7:58:56 AM org.apache.catalina.startup.Catalina start INFO: Server startup in 417 ms
- 将8080端口对外开放(tomcat要用),顺手再添加几个端口
[root@ubuntu /home/arnold/Arnold_test/20211023_Nginx/apache-tomcat-7.0.70/logs]16# firewall-cmd --list-all public (default, active) interfaces: ens33 sources: services: dhcpv6-client http ssh ports: 80/tcp protocols: masquerade: no forward-ports: icmp-blocks: rich rules: [root@ubuntu /home/arnold/Arnold_test/20211023_Nginx/apache-tomcat-7.0.70/logs]17# firewall-cmd --add-port=8080/tcp --permanent success [root@ubuntu /home/arnold/Arnold_test/20211023_Nginx/apache-tomcat-7.0.70/logs]18# firewall-cmd --add-port=8081/tcp --permanent success [root@ubuntu /home/arnold/Arnold_test/20211023_Nginx/apache-tomcat-7.0.70/logs]19# firewall-cmd --add-port=8082/tcp --permanent success [root@ubuntu /home/arnold/Arnold_test/20211023_Nginx/apache-tomcat-7.0.70/logs]20# firewall-cmd --add-port=9001/tcp --permanent success [root@ubuntu /home/arnold/Arnold_test/20211023_Nginx/apache-tomcat-7.0.70/logs]21# firewall-cmd --reload success [root@ubuntu /home/arnold/Arnold_test/20211023_Nginx/apache-tomcat-7.0.70/logs]22# firewall-cmd --list-all public (default, active) interfaces: ens33 sources: services: dhcpv6-client http ssh ports: 9001/tcp 8080/tcp 80/tcp 8081/tcp 8082/tcp protocols: masquerade: no forward-ports: icmp-blocks: rich rules:
-
然后在window浏览器上访问linux服务器的8080端口:发现可以连上tomcat服务
-
然后我们现在要用windows通过连接nginx 80端口的反向代理服务器,来访问到8080端口的tomcat服务(注意,nginx服务和tomcat服务都在我们的linux ubuntu虚拟机中)
-
这是老师画的原理图,他还在windows host文件里设置了域名映射ip,访问域名时,系统先会到host里找,找不到才会到网上dns服务器进行域名解析
-
然后修改windows上的host文件,让www.123.com指向反向代理服务器的ip,我这就不改了(格式是前面ip,后面域名)
-
修改nginx配置文件(老师还把server_name改成反向代理服务器的ip了,我不改好像也能实现功能)
-
改了之后保存,然后我用./nginx -s reload重新加载conf文件,然后我报了个错,解决方法见这:Nginx报错:nginx: [emerg] open() “/usr/local/nginx/…/conf/nginx.conf“ failed (2: No such file or direc,然后就是要注意tomcat服务有没有开,没开的话要打开,然后我们打开http://192.168.1.44/(后面加不加80端口都行),它就自动跳到tomcat页面那去了(8080端口)
跟直接访问8080端口效果一样
实现效果:使用 nginx 反向代理,根据访问的路径跳转到不同端口的服务中
nginx 监听端口为 9001,
访问 http://127.0.0.1:9001/edu/ 直接跳转到 127.0.0.1:8081
访问 http://127.0.0.1:9001/vod/ 直接跳转到 127.0.0.1:8082
第一步,准备两个 tomcat,一个 8001 端口,一个 8002 端口,并准备好测试的页面
第二步,修改 nginx 的配置文件
在 http 块中添加 server{}
该指令用于匹配 URL。
语法如下:
1、= :用于不含正则表达式的 uri 前,要求请求字符串与 uri 严格匹配,如果匹配
成功,就停止继续向下搜索并立即处理该请求。
2、~:用于表示 uri 包含正则表达式,并且区分大小写。
3、~*:用于表示 uri 包含正则表达式,并且不区分大小写。
4、^~:用于不含正则表达式的 uri 前,要求 Nginx 服务器找到标识 uri 和请求字
符串匹配度最高的 location 后,立即使用此 location 处理请求,而不再使用 location
块中的正则 uri 和请求字符串做匹配。
注意:如果 uri 包含正则表达式,则必须要有 ~ 或者 ~* 标识。
- 在这新建两个文件夹,一个tomcat8080,一个tomcat8081
- 然后把tomcat压缩包分别拷贝进去并解压
- 然后停掉之前的tomcat
[root@ubuntu /home/arnold/Arnold_test]5# ps -ef | grep tomcat root 2937 1694 0 22:23 ? 00:00:04 /usr/bin/java -Djava.util.logging.config.file=/home/arnold/Arnold_test/20211023_Nginx/apache-tomcat-7.0.70/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djdk.tls.ephemeralDHKeySize=2048 -Djava.endorsed.dirs=/home/arnold/Arnold_test/20211023_Nginx/apache-tomcat-7.0.70/endorsed -classpath /home/arnold/Arnold_test/20211023_Nginx/apache-tomcat-7.0.70/bin/bootstrap.jar:/home/arnold/Arnold_test/20211023_Nginx/apache-tomcat-7.0.70/bin/tomcat-juli.jar -Dcatalina.base=/home/arnold/Arnold_test/20211023_Nginx/apache-tomcat-7.0.70 -Dcatalina.home=/home/arnold/Arnold_test/20211023_Nginx/apache-tomcat-7.0.70 -Djava.io.tmpdir=/home/arnold/Arnold_test/20211023_Nginx/apache-tomcat-7.0.70/temp org.apache.catalina.startup.Bootstrap start root 3290 3128 0 23:11 pts/4 00:00:00 grep --color=auto tomcat [root@ubuntu /home/arnold/Arnold_test]6# [root@ubuntu /home/arnold/Arnold_test]6# kill -9 2937 [root@ubuntu /home/arnold/Arnold_test]7# ps -ef | grep tomcat root 3297 3128 0 23:13 pts/4 00:00:00 grep --color=auto tomcat [root@ubuntu /home/arnold/Arnold_test]8#
- 然后分别启动两个tomcat(8081哪个要修改配置文件)
./startup.sh
[root@ubuntu /home/arnold/Arnold_test/20211023_Nginx/tomcat8080/apache-tomcat-7.0.70/bin]15# ./startup.sh Using CATALINA_base: /home/arnold/Arnold_test/20211023_Nginx/tomcat8080/apache-tomcat-7.0.70 Using CATALINA_HOME: /home/arnold/Arnold_test/20211023_Nginx/tomcat8080/apache-tomcat-7.0.70 Using CATALINA_TMPDIR: /home/arnold/Arnold_test/20211023_Nginx/tomcat8080/apache-tomcat-7.0.70/temp Using JRE_HOME: /usr Using CLASSPATH: /home/arnold/Arnold_test/20211023_Nginx/tomcat8080/apache-tomcat-7.0.70/bin/bootstrap.jar:/home/arnold/Arnold_test/20211023_Nginx/tomcat8080/apache-tomcat-7.0.70/bin/tomcat-juli.jar Tomcat started.
进入到apache-tomcat-7.0.70/conf,修改server.xml文件Serve shutdown端口为8015,Connector端口为8081,下一个Conector端口为8019,改完后保存退出
然后启动第二个tomcat
[root@ubuntu /home/arnold/Arnold_test/20211023_Nginx/tomcat8081/apache-tomcat-7.0.70/bin]24# ./startup.sh Using CATALINA_base: /home/arnold/Arnold_test/20211023_Nginx/tomcat8081/apache-tomcat-7.0.70 Using CATALINA_HOME: /home/arnold/Arnold_test/20211023_Nginx/tomcat8081/apache-tomcat-7.0.70 Using CATALINA_TMPDIR: /home/arnold/Arnold_test/20211023_Nginx/tomcat8081/apache-tomcat-7.0.70/temp Using JRE_HOME: /usr Using CLASSPATH: /home/arnold/Arnold_test/20211023_Nginx/tomcat8081/apache-tomcat-7.0.70/bin/bootstrap.jar:/home/arnold/Arnold_test/20211023_Nginx/tomcat8081/apache-tomcat-7.0.70/bin/tomcat-juli.jar Tomcat started.
查看tomcat启动情况,可以看到,两个tomcat都启动了
[root@ubuntu /home/arnold/Arnold_test/20211023_Nginx/tomcat8081/apache-tomcat-7.0.70/conf]27# ps -ef | grep tomcat root 3338 1694 0 Oct25 pts/4 00:00:03 /usr/bin/java -Djava.util.logging.config.file=/home/arnold/Arnold_test/20211023_Nginx/tomcat8080/apache-tomcat-7.0.70/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djdk.tls.ephemeralDHKeySize=2048 -Djava.endorsed.dirs=/home/arnold/Arnold_test/20211023_Nginx/tomcat8080/apache-tomcat-7.0.70/endorsed -classpath /home/arnold/Arnold_test/20211023_Nginx/tomcat8080/apache-tomcat-7.0.70/bin/bootstrap.jar:/home/arnold/Arnold_test/20211023_Nginx/tomcat8080/apache-tomcat-7.0.70/bin/tomcat-juli.jar -Dcatalina.base=/home/arnold/Arnold_test/20211023_Nginx/tomcat8080/apache-tomcat-7.0.70 -Dcatalina.home=/home/arnold/Arnold_test/20211023_Nginx/tomcat8080/apache-tomcat-7.0.70 -Djava.io.tmpdir=/home/arnold/Arnold_test/20211023_Nginx/tomcat8080/apache-tomcat-7.0.70/temp org.apache.catalina.startup.Bootstrap start root 3572 1694 0 Oct25 pts/4 00:00:02 /usr/bin/java -Djava.util.logging.config.file=/home/arnold/Arnold_test/20211023_Nginx/tomcat8081/apache-tomcat-7.0.70/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djdk.tls.ephemeralDHKeySize=2048 -Djava.endorsed.dirs=/home/arnold/Arnold_test/20211023_Nginx/tomcat8081/apache-tomcat-7.0.70/endorsed -classpath /home/arnold/Arnold_test/20211023_Nginx/tomcat8081/apache-tomcat-7.0.70/bin/bootstrap.jar:/home/arnold/Arnold_test/20211023_Nginx/tomcat8081/apache-tomcat-7.0.70/bin/tomcat-juli.jar -Dcatalina.base=/home/arnold/Arnold_test/20211023_Nginx/tomcat8081/apache-tomcat-7.0.70 -Dcatalina.home=/home/arnold/Arnold_test/20211023_Nginx/tomcat8081/apache-tomcat-7.0.70 -Djava.io.tmpdir=/home/arnold/Arnold_test/20211023_Nginx/tomcat8081/apache-tomcat-7.0.70/temp org.apache.catalina.startup.Bootstrap start root 3618 3128 0 00:00 pts/4 00:00:00 grep --color=auto tomcat
- windows浏览器查看8080端口和8081端口,都能访问上(如果访问不上需要看看ubuntu防火墙有没有开放8081端口,前面有教怎么设置的)
- 在/home/arnold/Arnold_test/20211023_Nginx/tomcat8080/apache-tomcat-7.0.70/webapps/路径下新建edu文件夹,里面创建a.html文件,在里面填入:
8080!!!!!!!!
- 同样,在/home/arnold/Arnold_test/20211023_Nginx/tomcat8081/apache-tomcat-7.0.70/webapps/路径下新建vod文件夹,里面创建a.html文件,里面填入:
8081!!!!!!!!
- 在windows浏览器上访问可见如下:
- 配置Nginx反向代理服务器(新增一个server规则)
进入到/usr/local/nginx/conf,打开nginx.conf文件,在another virtual host…那后面新增:
# Arnold add 20211026
# another virtual host using mix of IP-, name-, and port-based configuration
#
server {
listen 9001;
server_name 192.168.1.44;
# Arnold zs
#location / {
#root html;
#index index.html index.htm;
#}
location ~ /edu/ {
proxy_pass http://127.0.0.1:8080;
}
location ~ /vod/ {
proxy_pass http://127.0.0.1:8081;
}
}
整个conf
#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;
# Arnold add 20211026
# add_header Access-Control-Allow-Origin *;
# add_header Access-Control-Allow-Methods 'GET, POST, PUT, DELETE, OPTIONS';
# add_header Access-Control-Allow-Headers 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Range,Content-Type,Authorization';
# add_header 'Access-Control-Expose-Headers' 'X-Location';
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip on;
#Arnold add 20211026
#upstream backend{
#server 192.168.1.30:80;
#ip_hash;
# }
server {
listen 80;
#server_name localhost;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
root html;
#proxy_pass http://127.0.0.1:8080;
proxy_pass http://192.168.1.30;
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;
#}
# 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;
# }
#}
# Arnold add 20211026
# another virtual host using mix of IP-, name-, and port-based configuration
#
server {
listen 9001;
server_name 192.168.1.44;
# Arnold zs
#location / {
#root html;
#index index.html index.htm;
#}
location ~ /edu/ {
proxy_pass http://127.0.0.1:8080;
}
location ~ /vod/ {
proxy_pass http://127.0.0.1:8081;
}
}
# 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;
# }
#}
}
- 然后我们重新加载conf文件,或者关闭重启nginx,都是可以的
[root@ubuntu /usr/local/nginx/sbin]12# ./nginx -s reload
(看弹幕说,因为都是在同一台服务器上,只用开放9001端口就行,8000和8001端口不用开放?)
- 完后打开网页地址,都用9001端口访问,可以看到,都能访问上
http://192.168.1.44:9001/edu/a.html
http://192.168.1.44:9001/vod/a.html



