Nginx实战
介绍
Nginx是一款高性能的http服务器、反向代理服务器、电子邮件(IMAP/POP3)代理服务器。
应用场景:
- http服务器:Nginx是一个http服务器,可以独立提供http服务,可以作为网页的静态服务器。
- 虚拟主机:可以实现一台服务器虚拟出多个网站。
- 反向代理、负载均衡:服务器集群可以使用Nginx做反向代理,使多台服务器可以平均分担负载。
一、使用Docker安装和运行Nginx
可参考:Docker部署Mysql+Tomcat+Nginx+Redis——CentOS8-arm64
同时新增一个~/nginx/conf.d/80.conf
端口配置文件:
server {
listen 80; # 监听的端⼝
server_name localhost; # 域名或ip
location / { # 访问路径配置
root /usr/share/nginx/html;# 根⽬录
index index.html index.htm; # 默认⾸⻚
}
error_page 500 502 503 504 /50x.html; # 错误⻚⾯
location = /50x.html {
root html;
}
}
在最后一步创建并运行docker容器时,使用以下命令映射三个端口到主机:
docker run -id --name=c_nginx \
-p 80:80 \
-p 81:81 \
-p 82:82 \
-v $PWD/conf/nginx.conf:/etc/nginx/nginx.conf \
-v $PWD/conf.d:/etc/nginx/conf.d \
-v $PWD/logs:/var/log/nginx \
-v $PWD/html:/usr/share/nginx/html \
nginx
二、Nginx静态网站部署
由于上一步创建容器的时候已经将~/nginx/html
目录挂在到容器的/usr/share/nginx/html
目录,因此在~/nginx/html
目录中创建一个index.html文件并写入:
index.html --port=80
随后访问 http://虚拟机ip:80 即可看到页面中输出上述内容
端口绑定
-
新建静态文件
在
~/nginx
目录下新建文件夹index,并进入。创建index.html:index.html --port=81
在
~/nginx
目录下新建文件夹regist,并进入。创建regist.html:index.html --port=82
将这两个目录放到容器的
/usr/share/nginx
目录下:docker cp ~/nginx/index/ c_nginx:/usr/share/nginx docker cp ~/nginx/regist/ c_nginx:/usr/share/nginx
-
新建一个Nginx配置文件,配置端口访问路径及访问的首页文件
server { listen 81; # 监听的端⼝ server_name localhost; # 域名或ip location / { # 访问路径配置 root /usr/share/nginx/index;# 根⽬录 index index.html index.htm; # 默认⾸⻚ } error_page 500 502 503 504 /50x.html; # 错误⻚⾯ location = /50x.html { root html; } } server { listen 82; # 监听的端⼝ server_name localhost; # 域名或ip location / { # 访问路径配置 root /usr/share/nginx/regist;# 根⽬录 index regist.html; # 默认⾸⻚ } error_page 500 502 503 504 /50x.html; # 错误⻚⾯ location = /50x.html { root html; } }
-
访问测试
访问 http://虚拟机ip:81 可以看到页面输出的内容中端口号为81
访问 http://虚拟机ip:82 可以看到页面输出的内容中端口号为82
域名绑定
Mac绑定域名可以在/etc/hosts
文件中最后一行新增配置:
192.168.215.128 www.test.com
在本机访问 www.test.com 即访问IP地址192.168.215.128
如果在本机配置了域名绑定,则在nginx配置文件中的server_name
可以写成配置过的域名。
三、Nginx反向代理与负载均衡
正向代理与反向代理
- 正向代理:针对客户端来说,nginx作为代理服务器可以转发客户端的请求到外网
- 反向代理:针对服务器来说,nginx将外部请求(客户端请求)转发到内部网络上的服务器,并将从服务器得到的结果返回给客户端
配置反向代理
-
在docker中部署并运行tomcat
由于我用的是m1芯片的macbook,因此需要拉取arm64版的tomcat:
docker pull arm64v8/tomcat
创建容器,设置端口、目录映射:
# 在/root⽬录下创建tomcat⽬录⽤于存储tomcat数据信息 mkdir ~/tomcat cd ~/tomcat
docker run -id --name=c_tomcat \ -p 8080:8080 \ -v $PWD:/usr/local/tomcat/webapps \ tomcat
创建一个测试页面:
cd ~/tomcat mkdir ROOT cd ROOT vim index.html
index.html
tomcat index.html --port=8080
测试访问:
访问 http://虚拟机ip:8080/index.html 即可看到写在index.html文件中的内容。
-
配置反向代理
新建nginx配置文件
~/nginx/conf.d/proxy.conf
upstream tomcat-test{ server 192.168.215.128:8080; # 这里填写你的虚拟机ip:8080 } server { listen 80; # 监听的端⼝ server_name www.test.com; # 域名或ip location / { # 访问路径配置 proxy_pass http://tomcat-test; index index.html index.htm; # 默认⾸⻚ } }
重启nginx 访问: http://www.test.com 即可看到部署tomcat时访问的index.html文件内容
负载均衡
负载均衡,英⽂名称为Load Balance,其意思就是分摊到多个操作单元上进⾏执⾏,例如Web服务器、FTP服务器、企业关键应⽤服务器和其它关键任务服务器等,从⽽共同完成⼯作任务。
配置负载均衡
-
将反向代理时创建的tomcat文件夹复制两份,分别为tomcat-8081、tomcat-8082
-
修改ROOT目录下index.html文件的内容:
~/tomcat-8081/ROOT/index.html
tomcat index.html --port=8081
~/tomcat-8082/ROOT/index.html
tomcat index.html --port=8082
-
使用docker创建3个tomcat容器,端⼝分别为8080 ,8081,8082 。
docker run -id --name=c_tomcat1 \ -p 8081:8080 \ -v ~/tomcat-8081/:/usr/local/tomcat/webapps \ tomcat
docker run -id --name=c_tomcat2 \ -p 8082:8080 \ -v ~/tomcat-8082/:/usr/local/tomcat/webapps \ tomcat
-
启动这三个服务
-
新建Nginx配置文件
~/nginx/loadbalance.conf
upstream tomcat-lb { server 192.168.215.128:8080; server 192.168.215.128:8081; server 192.168.215.128:8082; } server { listen 80; # 监听的端⼝ server_name www.test.com; # 域名或ip location / { # 访问路径配置 # root index;# 根⽬录 proxy_pass http://tomcat-lb; index index.html index.htm; # 默认⾸⻚ } error_page 500 502 503 504 /50x.html; # 错误⻚⾯ location = /50x.html { root html; } }
-
访问测试
访问 http:.//www.test.com 刷新观察网页内容中的端口号,发现这三个端口号是轮询访问的。
如果其中⼀台服务器性能⽐较好,想让其承担更多的压⼒,可以设置权重。
⽐如想让8081端口的服务器出现次数是其它服务器的2倍,则修改配置如下:
upstream tomcat-lb { server 192.168.215.128:8080; server 192.168.215.128:8081 weight=2; server 192.168.215.128:8082; }