基本概念
- nginx是什么,做什么事情? 「Nginx 高性能的HTTP和反向代理服务器」 特点是 占用内存少,并发能力强。事实上nginx的并发能力在同类型的网页服务器中表现较好。转为性能优化开发,能经受主高负载的考验,有报告表明,能支持高达50000个并发连接数.
本篇文章的知识来源于教学视频总结 自己总结的一些经验 教学视频地址: https://www.bilibili.com/video/BV1zJ411w7SV?p=1
- 下载地址 方式1:linux上运行(亲测下载挺快的) wget http://nginx.org/download/nginx-1.20.2.tar.gz
方式2: 打开下载网址: http://nginx.org/en/download.html, 选择喜欢的版本去下载
- 编译部署
参考文章: https://www.cnblogs.com/herui1991/p/8996917.html(「其中有些坑需要注意!」)
代码语言:javascript复制1. 安装依赖环境:
yum -y install gcc gcc-c make automake autoconf pcre pcre-devel zlib zlib-devel openssl openssl-devel libtool
2. 解压压缩包:
tar zxvf nginx-1.20.2.tar.gz
3. 进入解压目录:
cd nginx-1.20.2
4. 编译ngnix:
./configure --prefix=/usr/local/nginx --sbin-path=/usr/local/nginx/sbin/nginx --conf-path=/usr/local/nginx/conf/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx/nginx.pid --lock-path=/var/lock/nginx.lock --with-http_ssl_module --with-http_stub_status_module --with-http_gzip_static_module --http-client-body-temp-path=/var/tmp/nginx/client/ --http-proxy-temp-path=/var/tmp/nginx/proxy/ --http-fastcgi-temp-path=/var/tmp/nginx/fcgi/ --http-uwsgi-temp-path=/var/tmp/nginx/uwsgi --http-scgi-temp-path=/var/tmp/nginx/scgi --with-pcre
5. 生成nginx服务:
make && make install
6.运行测试
cd /usr/local/nginx/sbin
./nginx
ps -ef|grep nginx 如果看到ngnix在运行, 说明编译完成
「坑1」 按照帖子编译出来的nginx,./nginx运行时,出现报错: nginx: [emerg] getpwnam("nginx") failed 「解决方法」: 编译安装nginx的时候(运行./configure这个很长的命令时)指定了--user=nginx和--group=nginx,去除就对了(「我上面写的./configure命令是去除后的, 可直接使用」)
「坑2」 我在实际操作过程中遇到个报错:
「解决方法」: 看报错是缺少一个文件夹,创建好就行 cd /var/tmp/nginx mkdir nginx
- 正向代理介绍
- 反向代理 客户端对代理无感知, 因为客户端不需要任何配置就可以访问. 我们只需要将请求发送到反向代理服务器,由反向代理服务器取选择目标服务器获取数据后,返回给客户端.此时 反向代理服务器 和 目标服务器对外就是一个服务器, 暴露的是代理服务器的地址, 「隐藏了真实服务器ip地址」
常用命令
代码语言:javascript复制启动: ./nginx
查看版本: ./nginx -v 当前使用的版本为 1.20.1
关闭 nginx
./nginx -s stop
重新加载 nginx 主要用于修改配置文件后, 重新加载配置文件(类似于热部署)
./nginx -s reload
实际演示示例(2个)
「将客户端的访问, 通过nginx反向代理到tomcat」
- 首先准备好tomcat环境, 下载地址: https://tomcat.apache.org/
- 内网部署好tomcat, 确保可以正常访问, 下面记录下关键步骤:
- 首先确定要确保准备占用的端口是哪个, tomcat默认的端口是8080.可修改默认端口(),
cd /usr/local/apache-tomcat-8.5.73/conf
vim server.xml , 修改图示地方的端口号
「关于vim快速查询关键字的小技巧」 vim 文件名后,使用 /port ,回车即可定位到关键字第一个出现的位置,按 "n"可定位到下一个关键字位置,按"N"可往上查找关键字的位置
- 启动tomcat cd /usr/local/apache-tomcat-8.5.73/bin sh startup.sh
「验证是否启动成功」 方法1:浏览器访问 http://ip:8090 方法2: ps -ef|grep tomcat
- 配置nginx cd /usr/local/nginx/conf vim nginx.conf 将原来的配置注释掉, 使用箭头对应的配置即可
- 使nginx重新加载配置文件 ./nginx -s reload
- 「验证反向代理效果」 假设nginx所在机器ip为192.168.100.100, 使用的port是80(默认端口) 浏览器访问 http://192.168.100.100:80 此时就会跳转到tomcat的网站页面
「nginx作为反向代理,根据访问路径,跳转到不同端口的服务中」
预期效果如下:
访问http://127.0.0.1:80/edu/a.html, 跳转到127.0.0.1:8090, 访问对应的a.html资源 访问http://127.0.0.1:80/vod/a.html, 跳转到127.0.0.1:8091, 访问对应的a.html资源
- 首先准备一个新的tomcat环境, 我的操作是:
1.拷贝一个新的tomcat环境
cp -r apache-tomcat-8.5.73 apache-tomcat-8.5.73-1
2.修改新tomcat环境的端口号(注意要修改2个地方!)
<Connector port="8091" protocol="HTTP/1.1" 原来是8090, 1
<Server port="8006" shutdown="SHUTDOWN"> 原来是8005, 1
- 准备资源
首先在第1个tomcat(使用8090端口)的指定目录创建资源
cd /usr/local/apache-tomcat-8.5.73/webapps/ROOT
mkdir edu
vim a.html 内容: <h1>8090-edu</h1>
在第2个tomcat(使用8091端口)的指定目录创建资源
cd /usr/local/apache-tomcat-8.5.73-1/webapps/ROOT
mkdir vod
vim a.html 内容: <h1>8091-vod</h1>
- 启动新的tomcat cd /usr/local/apache-tomcat-8.5.73-1/bin sh startup.sh
- 验证启动 假设服务器ip是 192.168.100.100 浏览器访问 http://192.168.100.100:8091 此时预期会跳转到tomcat的网站页面
- 配置nginx
vim nginx.conf, 增如下的配置
代码语言:javascript复制 server {
listen 9001;
server_name 127.0.0.1;
location ~ /edu/ {
proxy_pass http://127.0.0.1:8090;
}
location ~ /vod/ {
proxy_pass http://127.0.0.1:8091;
}
}
配置说明: 如果访问路径带有/edu,那么nginx就会反向代理到 http://127.0.0.1:8090/edu, 另一个同理
改为配置后,记得重新加载配置: ./nginx -s reload 6. 测试效果 http://192.168.16.122:9001/edu/a.html
http://192.168.16.122:9001/vod/a.html
「调试技巧:」
- 建议配置好单个tomcat后,先分别访问一下, 是不是单独就能访问到预期的资源,如前面配置的tomcat1资源,就可以先用 http://127.0.0.1:8090/edu/a.html 先单独调试下这个服务的正确性
- 如果访问失败,可以排查下防火墙的相关原因
- 可以结合「nginx的日志」去分析一些问题, 因为当前使用的nginx是自己编译的, 所以咱们要看下编译时指定的路径,咱们的./configure 这个命令中指定了 --http-log-path=/var/log/nginx/access.log, 所以访问nginx的日志会存储在/var/log/nginx/access.log, 咱们可以通过「查看日志命令」: tail -5f /var/log/nginx/access.log(实时查看最后5条日志)来实时的打印出前端的访问请求