Nginx快速入门
Nginx快速入门,了解什么是Nginx,正向代理,反向代理,负载均衡的概念,学会Nginx的安装和常用的命令,并且能实际场景应用Nginx
什么是Nginx?
Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点(俄文:Рамблер)开发的,公开版本1.19.6发布于2020年12月15日。
其将源代码以类BSD许可证的形式发布,因它的稳定性、丰富的功能集、简单的配置文件和低系统资源的消耗而闻名。2022年01月25日,nginx 1.21.6发布。
Nginx是一款轻量级的Web服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中表现较好。[来源百度百科]
Nginx作用
Http代理,反向代理:作为web服务器最常用的功能之一,特别是反向代理
正向代理
反向代理
反向代理是代理服务器
,举个例子,某一天我朋友的网站突然火了,大量用户请求访问网站,这时该网站只有一台服务器,并发量增大,容易造成瘫痪,这时我们用5台服务器均衡分担访问量,那怎么让大量用户访问10台服务器呢?
这就需要一个反向代理服务器,用户均衡访问这5台服务器,服务器就不会容易崩溃,那么有一个问题每个服务器配置不同,能接受访问量也是不同,如何让用户请求访问分担的承受量到不同服务器呢。
Nginx提供的负载均衡策略有2种:内置策略和扩展策略。内置策略为轮询,加权轮询,Iphash。扩展策略,就天马行空,只有你想不到的没有他做不到的。
负载均衡
轮询
加权轮询
iphash对客户端请求的ip进行hash操作,然后根据hash结果将同一个客户端ip的请求分发给同一台服务器进行处理,可以解决session不共享的问题。
除此之外,动静分离,在我们的软件开发中,有些请求是需要后台处理的,有些请求是不需要经过后台处理的(如:css、html、jpg、js等等文件),这些不需要经过后台处理的文件称为静态文件。让动态网站里的动态网页根据一定规则把不变的资源和经常变的资源区分开来,动静资源做好了拆分以后,我们就可以根据静态资源的特点将其做缓存操作。提高资源响应的速度。
linux服务器下安装
-
下载在本地目录的压缩包
-
因为我使用Xshell,本地文件上传到Linux服务器
apt install lrzsz # rz,sz是便是Linux/Unix同Windows进行ZModem文件传输的命令行工具
- 运行命令rz,即是接收文件,上传到Linux服务器上
- 解压
tar -zxvf nginx-1.22.0.tar.gz
cd nginx-1.22.0
- 配置,使用默认配置,在Nginx根目录下执行
./configure
make
make install
- 查找安装路径
whereis nginx
Nginx常用命令
# Nginx常用命令
cd /usr/local/nginx/sbin
./nginx #启动
./nginx -s stop #关闭
./nginx -s quit #安全退出
./nginx -s reload #重新加载配置文件,修改端口一定要重新加载文件
启动成功访问服务器公网ip地址:默认80端口
注意:
:如果连接不上,检查阿里云安全组是否开放端口,或者服务器防火墙是否开放端口
到这一步,我遇到bug,ip地址访问不了。
遇到bug问题
- 一开始还以为是服务器防火墙没有开放80端口,一查确实没有,后面端口开放还是不能访问
cd /usr/local/nginx/sbin
firewall-cmd --query-port=80/tcp #查询是否开放端口
cd /usr/local/nginx/sbin#
firewall-cmd --permanent --add-port=80/tcp #开放80端口
firewall-cmd --permanent --remove-port=80/tcp #移除80端口
- 启动nginx,出现这种情况一般是80端口被占用
- 启动nginx:404
cd /usr/local/nginx
cd conf/
vim nginx.conf
我试得改80端口,重新加载配置文件
usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf #在nginx.conf路径加载配置文件
systemctl stop firewalld #关闭防火墙
systemctl disable firewalld #禁止开机启动
systemctl status firewalld #查看firewalld状态
systemctl start firewalld #开启防火墙
/etc/init.d/bt restart #重启宝塔,这里是我公网ip访问不了,才去加载宝塔
systemctl status firewalld #查看firewalld状态,防火墙未启动,这里我们要关闭防火墙
最终解决方式:sudo netstat -lnp|grep 80命令查看80端口占用的进程15683、15762,然后把这两个进程干掉
通过kill命令干掉这两个进程
sudo kill -9 15683
sudo kill -9 15762
./nginx再次启动,成功
博客遇到的问题
- 服务是否正常启动且监听在对应的端口
常见的几个服务启动/重启/开机启动命令如下
Nginx: systemctl start/restar/enable nginx
MySQL: systemctl start/restar/enable mysql/mysqld/mysql-server/mariadb
Apache: systemctl start/restar/enable apache2/httpd
SSH: systemctl start/restar/enable ssh/openssh/sshd
所以您这边8090无法使用,需要有一个程序使用8090,以后您才可以正常使用;例如您网站使用8090 您需要让您提供网站的web服务使用监听8090,才可以让您的网站进行使用
#查找所有容器
docker container ls -all
#容器有重复名字,删除容器
docker container rm halo
解决问题,重启docker,重新在iptables中注册一个链
后来第二天就可以了,真神奇。