前言
已准备好如下软件:
- VMware
- Xshell和Xftp
安装CentOS7.4
下载
选择CentOS-7-x86_64-Minimal-1708.iso进行下载
使用VMware运行虚拟机
联网
修改网卡配置文件:
vi /etc/sysconfig/network-scripts/ifcfg-ens33
将ONBOOT=no改为ONBOOT=yes
保存退出后,执行:(重启网卡)
systemctl restart network
使用ping命令测试可以联网
重启网卡失败有可能是VMware软件的问题,可卸载重装
设置静态ip
使用Xshell连接虚拟机(Xshell终端的操作更方便):
使用ip addr查看ens33的IP地址
打开Xshell新建连接:
- 名称随意、主机填写IP地址
- 填写用户名(root)和密码、完成连接
修改配置文件:
vi /etc/sysconfig/network-scripts/ifcfg-ens33
将BOOTPROTO=dhcp改为BOOTPROTO=static
添加如下配置ip地址、子网掩码、网关、DNS:(每人的ip地址不同)
1 | IPADDR=192.168.181.128 |
查看网关是否正确:
- VMware左上角点击编辑
- 虚拟网络编辑器
- 更改设置
- 选择VMnet8
- 点击
NET设置即可查看网关
重启网卡:systemctl restart network
ping命令测试联网成功(ping 8.8.8.8)
Nginx安装和启动
在安装之前可将虚拟机克隆一份:
- 虚拟机关机
- 右键-管理-克隆
下载地址: nginx-1.21.6
点击nginx-1.21.6进行下载、完成后通过Xftp将压缩包传到虚拟机上
也可以直接在虚拟机里使用wget下载
安装所需环境:
安装gcc:
yum install -y gcc安装PCRE pcre-devel:
yum install -y pcre pcre-devel安装zlib:
yum install -y zlib zlib-devel
解压安装nginx:
- 解压:
tar zxvf nginx-1.21.6.tar.gz - 进入 :
cd nginx-1.21.6 - 配置并指定安装目录:
./configure --prefix=/usr/local/nginx - 编译、安装:
make;make install
启动nginx:
- 进入安装目录:
cd /usr/local/nginx/sbin/ - 启动:
./nginx - 验证:浏览器访问虚拟机的ip地址(需关闭防火墙)
防火墙:
- 关闭:
systemctl stop firewalld.service - 禁止防火墙开机启动:
systemctl disable firewalld.service
nginx服务脚本:
创建脚本文件:
vi /usr/lib/systemd/system/nginx.service文件内容:
1
2
3
4
5
6
7
8
9
10
11
12
13
14[Unit]
Description=nginx - web server
After=network.target remote-fs.target nss-lookup.target
[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStartPre=/usr/local/nginx/sbin/nginx -t -c /usr/local/nginx/conf/nginx.conf
ExecStart=/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/usr/local/nginx/sbin/nginx -s stop
ExecQuit=/usr/local/nginx/sbin/nginx -s quit
PrivateTmp=true
[Install]
WantedBy=multi-user.target保存退出
重新加载系统服务:
systemctl daemon-reload关闭nginx:
./nginx -s stop启动服务:
systemctl start nginx.service查看:
systemctl status nginx.service,出现active (running)表示成功开机启动:
systemctl enable nginx.service重启:
reboot,等待一会后浏览器可访问虚拟机ip地址表示脚本成功执行
nginx基本使用
在修改配置之前克隆一份虚拟机
目录结构
可使用Xftp查看/usr/local/nginx/
- conf:配置文件
- html:静态页面
- logs:日志
- sbin:nginx的主程序
“_temp”结尾的文件夹是nginx运行时才生成的
基本运行原理
nginx启动后有一个主进程(Master)和多个子进程(Worker)
Master校验配置文件,协调子进程
Worker处理和响应请求
配置文件(nginx.conf)
进入/usr/local/nginx/conf/
使用Xftp时,右键文件可以通过记事本进行编辑
编辑nginx.conf:(如下是开头的两行)
1 | #user nobody;#该符号表示注释 |
先不看带注释的配置:(最小配置文件)
1 | worker_processes 1; #子进程个数 |
虚拟主机
配置多个server:
1 | server { |
修改配置后重新加载nginx:ststemctl reload nginx
server_name:还可以使用正则表达式进行匹配
可以修改本机的hosts文件进行server_name的测试:C:\Windows\System32\drivers\etc\hosts(需管理员权限)
在最后添加:192.168.181.128 x.com,前者为虚拟机ip地址,后者为自定义域名
修改后可以在本机通过域名访问虚拟机ip地址
反向代理
反向代理服务器(比如nginx)位于用户和目标服务器(比如Tomcat)之间,用户无法直接访问Tomcat,而由nginx接收请求,然后转发给Tomcat,返回数据给nginx后,再返回给用户。
proxy_pass
配置反向代理:
1 | server { |
重新加载nginx:systemctl reload nginx
浏览器再次访问虚拟机ip会重定向到腾讯网(外网服务器)(301:重定向,地址栏改变)
测试代理内网服务器:
克隆一份虚拟机(刚安装配置好nginx的状态)
修改配置文件:
vi /etc/sysconfig/network-scripts/ifcfg-ens33修改
IPADDR=192.168.181.128为IPADDR=192.168.181.129重启网卡:
systemctl restart networkXshell连接192.168.181.129
修改/usr/local/nginx/html/index.html
Xshell连接192.168.181.128
修改配置:
proxy_pass http://192.168.181.129 ; #指定服务器重新加载nginx:
systemctl reload nginx浏览器访问192.168.181.128,显示192.168.181.129上的index.html(地址栏不变)
负载均衡
反向代理多个服务器,当nginx接收到请求时,通过轮询的方式将请求转发给服务器(轮流)
作用:通过负载均衡,将多个请求分摊到多台服务器上,相当于把一台服务器需要承担的负载量交给多台服务器处理,进而提高系统的吞吐率;另外如果其中某一台服务器挂掉,其他服务器还可以正常提供服务,以此来提高系统的可伸缩性与可靠性。
按照之前的流程再克隆一个虚拟机,ip设置为192.168.181.130并修改index.html
Xshell连接192.168.181.128,进行配置:
1 | upstream httpds{ #upstream:对应多组服务器,httpds:自定名称 |
upstream和server同级
重新加载nginx:systemctl reload nginx
浏览器多次访问192.168.181.128,轮流显示两个服务器中index.html的内容
负载均衡策略
权重 weight
1
2
3
4upstream httpds{
server 192.168.181.129 weight=8; #添加weight:值越大,访问该服务器的概率越大
server 192.168.181.130 weight=2;
}下线 down
1
2
3
4upstream httpds{
server 192.168.181.129 weight=8 down; #down:该服务器不会被访问(出现故障时下线该服务器)
server 192.168.181.130 weight=2;
}备用 backup
1
2
3
4upstream httpds{
server 192.168.181.129 weight=8 down;
server 192.168.181.130 weight=2 backup; #backup:备用机,只有其他服务器都不可用时才会被使用
}
都需要手动配置文件然后reload nginx
动静分离
将静态资源(比如图片、css、js)放在nginx上
作用:将静态页面与动态页面或者静态内容接口和动态内容接口分开不同系统访问的架构设计方法,进而提升整个服务访问性能和可维护性。
在nginx配置中的server下配置多个location即可(也可使用正则):
1 | location / { |
URLRewrite
重写url,可以隐藏真实的url
1 | location / { |
rewrite <正则> <真实uri> <标识>;
^:正则开始,$:正则结束
将匹配到的正则替换为真实uri($1:表示正则表达式的第一个括号里匹配到的内容)
四种标识:
- last #本条规则匹配完成后,继续向下匹配新的location URI规则
- break #本条规则匹配完成即终止,不再匹配后面的任何规则
- redirect #返回302临时重定向,浏览器地址会显示跳转后的URL地址
- permanent #返回301永久重定向,浏览器地址栏会显示跳转后的URL地址
try_files
按顺序检查文件是否存在,返回第一个找到的文件或文件夹,如果所有的文件或文件夹都找不到,会进行一个内部重定向到最后一个参数。
1 | location / { |
查找逻辑:
- 首先:检查
data目录中是否存在api文件,如果存在,则返回文件;如果不存在,则进行下一步。 - 其次:检查
data目录中是否存在api/目录,如果存在,则在检查api/目录中是否存在index.html或者index.htm文件(由index指定);如果存在,则返回该文件。如果不存在,则进行下一步。 - 最后:检查
data目录中是否存在 index.html 文件。如果存在,则返回文件;如果不存在,则返回 404。
- 本文标题:nginx
- 本文作者:灵感胜于汗水
- 创建时间:2022-03-30 22:13:33
- 本文链接:https://cjhsyc.github.io/2022/03/30/nginx/
- 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!