记录Nginx安装,负载均衡,反向代理,虚拟主机
nginx的由来
俄罗斯的工程师 Igor Sysoev,他在为 Rambler Media 工作期间,使用 C 语言开发了 Nginx。Nginx 作为 Web 服务器一直为 Rambler Media 提供出色而又稳定的服务。然后呢,Igor Sysoev 将 Nginx 代码开源,并且赋予自由软件许可证。
Nginx 是一款自由的、开源的、高性能的 HTTP 服务器和反向代理服务器;同时也是一个 IMAP、POP3、SMTP 代理服务器。
Nginx 的优势
- 轻量级:安装文件小,运行时 CPU 内存使用率低;
- 性能强:支持多核,处理静态文件效率高,内核采用的 poll 模型最大可以支持 50K 并发连接;
- 支持热部署,同时启动速度快,可以在不间断服务的情况下对软件和配置进行升级;
- 负载均衡,支持容错和健康检查;
- 代理功能强大,支持无缓存的反向代理,同时支持 IMAP/POP3/SMTP 的代理。
Nginx 的劣势
- 相比 Apache 模块要少一些,常用模块都有,支持 LUA 语言扩展功能
- 对动态请求支持不如 Apache
- Windows 版本功能有限,受限于 Windows 的特性,支持最好的还是 Unix/Linux 系统
------------------------------------------------------------------------
当 web 应用发展到一定程度时,单台服务器不足以支撑业务的正常运行,为增大吞吐量往往会使用多台服务器一起提供服务,如何充分利用多台服务器的资源,就需要一个‘调度员’,这个调度员要求能高效的接收并分发请求,知道后端的服务器健康状态,要能方便的扩展和移除,这就是 Nginx 又一常见应用架构,此架构充分利用了 Nginx 的反向代理和负载均衡的优势,Nginx 本身不提供 web 服务,而是在前端接受 Web 请求并分发到后端服务器处理,后端服务器可以是 Apache、Tomcat、IIS 等。
代理:
正向代理
反向代理
区别:正向代理代理的时客户端Client,反向代理是代理的服务端Server
有个不错的图片来自知乎
反向代理:
反向代理犹如你访问baidu.com,我查询的答案后端可能是成千上万的服务器,但具体的是哪台,我不知道,反向代理服务器会帮我们把请求转发到真实的服务器那里去。Nginx就是性能非常好的反向代理服务器,用来做负载均衡。
负载均衡解释:
Nginx 反向代理服务器接收到的请求数量,就是我们说的负载量。请求数量按照一定的规则进行分发,到不同的服务器处理的规则,就是一种均衡规则。
-------------------------
安装
nginx
缓存proxy_cache
-
proxy_cache_path 设置缓存文件写在那个目录,命名方式等
nginx配置文件语法高亮
nginx负载均衡
示例:
http {
include mime.types;
default_type application/octet-stream;
upstream webhost { #可以在此位置引用upstream,并指定调度算法
server 172.16.0.129 ;
server 172.16.0.130 ;
}
...
...
server {
...
...
location / { #在location中填写格式如此的proxy_pass
proxy_pass http://webhost;
index index.html index.htm;
}
////————||||————\\\\\
浏览目录基本配置 autoindex
location /zip
{
root /home/map/www/; #指定目录所在路径
autoindex on; #开启目录浏览
autoindex_format html; #以html风格将目录展示在浏览器中
autoindex_exact_size off; #切换为 off 后,以可读的方式显示文件大小,单位为 KB、MB 或者 GB
autoindex_localtime on; #以服务器的文件时间作为显示的时间
charset utf-8,gbk; #展示中文文件名
}
location /down {
root /soft/package/src/
...
}
真实路径 /soft/package/src/down
----------------------------------------
location / {
root /soft/package/src/
...
}
真实路径 /soft/package/src/
---------------------------------------
连接频率限制 limit_conn_module
请求频率限制 limit_req_module
可添加如下代码,
limit_req_zone $binary_remote_addr zone=req_zone:1m rate=1r/s; #http段配置请求限制, rate限制速率,限制⼀秒钟最多⼀一个IP请求
在需要使用的location段可以添加zone,
添加
limit_req zone=req_zone;
yum install -y httpd-tools
bing按照如下执行
]# ab -n 50 -c 20 http://127.0.0.1/access #访问的目录或文件随location变化
查看下错误日志,
2020/05/20 14:45:14 [error] 36307#0: *505 limiting requests, excess: 0.994 by zone "reqver: localhost, request: "GET /access HTTP/1.0", host: "127.0.0.1"
虚拟机只能实现请求的限制,并发检测需使用公有云,,应该,,,,,
------------------------------------------
IP访问限制
deny
allow
#配置拒绝某⼀一个IP, 其他全部允许
location / {
root html;
index index.html;
deny 192.168.56.1;
allow all;
}
#只允许某⼀一个⽹网段访问,其它全部拒绝
location / {
root html;
index index.php index.html index.htm;
allow 192.168.56.0/24;
deny all;
}
~]# yum install httpd-tools
~]# htpasswd -c /usr/local/nginx/auth_conf zhiqiang #将用户名密码写入指定目录的文件可在http,server,location下添加如下信息
auth_basic "Auth access Blog Input your Passwd!";
auth_basic_user_file /usr/local/nginx/auth_conf;
实验:
)环境 www.baidu.com /web/www/baidu www.sina.com /web/www/sina
修改配置文件
服务端操作:
添加include在nginx.conf
include /usr/local/nginx/conf/conf.d/*.conf;
创建conf/conf.d目录,并编写baidu.conf sina.conf
#baidu.conf
server {
listen 172.16.0.194:80;
server_name www.baidu.com baidu.com;
location / {
root /web/www/baidu;
index index.html;
}
}
#sina.conf
server {
listen 172.16.0.194:80;
server_name www.sina.com sina.com;
location / {
root /web/www/sina;
index index.html;
}
}
#创建未补充的/web/www/baidu;sina目录,并写入index.html
mkdir -p /web/www/{baidu,sina}
cd /web/www/baidu;echo baidu>index.html
cd /web/www/sina;echo sina>index.html
客户端操作:
1.修改hosts文件
[root@master conf]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
#添加
172.16.0.130 www.baidu.com //服务端IP
172.16.0.130 www.sina.com
2.下载工具
]# yum install elinks -y
3.请求
-------------------------------
3)创建网页的根目录及首页文件
[root@node1 conf.d]# mkdir -p /web/www/{baidu,sina,default}
[root@node1 conf.d]# cd /web/www/baidu/
[root@node1 baidu]# echo baidu > index.html
[root@node1 baidu]# echo sina > ../sina/index.html
[root@node1 baidu]# echo default > ../default/index.html
4)检查语法
[root@node1 baidu]# nginx -t
5)重新加载
[root@node1 baidu]# nginx -s reload
6)客户端测试 —— 172.16.0.169
[root@node2 ~]# vim /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
172.16.0.168 www.baidu.com
172.16.0.168 www.sina.com
[root@node2 ~]# yum install elinks -y
[root@node2 ~]# elinks --dump www.baidu.com
baidu
[root@node2 ~]# elinks --dump www.sina.com
sina
server | Apache | Nginx | Lighttpd |
Proxy 代理 | 非常好 | 非常好 | 一般 |
Rewriter | 好 | 非常好 | 一般 |
Fcgi | 不好 | 好 | 非常好 |
热部署 | 不支持 | 支持 | 不支持 |
系统压力比较 | 很大 | 很小 | 比较小 |
稳定性 | 好 | 非常好 | 不好 |
安全性 | 好 | 一般 | 一般 |
技术支持 | 非常好 | 很少 | 一般 |
静态文件处理 | 一般 | 非常好 | 好 |
Vhosts 虚拟主机 | 支持 | 不支持 | 支持 |
反向代理 | 一般 | 非常好 | 一般 |
Session sticky | 支持 | 不支持 | 不支持 |
-
worker进程的数量与服务器上的CPU核心数相等
-
master进程负责管理work进程
-
Nginx是支持单进程(master进程)提供服务的