nginx简介
Nginx 是高性能的 HTTP 和反向代理的web服务器,处理高并发能力是十分强大的,能经受高负 载的考验,有报告表明能支持高达 50,000 个并发连接数。
其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。
1.安装nginx
1.1解压和安装nginx
下载地址:https://nginx.org/en/download.html
tar zxf nginx-1.20.1.tar.gz //解压
cd nginx-1.20.1/
./configure --prefix=/usr/local/nginx --with-http_ssl_module --with-http_stub_status_module
//自定义配置模块
yum install -y gcc //安装依赖语言包
./configure --prefix=/usr/local/nginx --with-http_ssl_module --with-http_stub_status_module
yum install -y pcre-devel //根据提示缺少什么就装什么
./configure --prefix=/usr/local/nginx --with-http_ssl_module --with-http_stub_status_module
yum install -y openssl-devel
./configure --prefix=/usr/local/nginx --with-http_ssl_module --with-http_stub_status_module
[root@server1 objs]# make //编译
[root@server1 objs]# make install //安装
标志编译成功
出现Makefile标志安装成功
安装完成后会自动在/usr/local下生成一个nginx文件夹
[root@server1 objs]# cd /usr/local/nginx/sbin
[root@server1 sbin]# ls
[root@server1 sbin]# netstat -antlup //查看端口
[root@server1 sbin]# ./nginx //启动服务
[root@server1 sbin]# curl localhost //查看连接信息
[root@server1 sbin]# ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin //建立软连接,进行全局部署
1.2提高安全性和隐藏版本号
nginx
cd nginx-1.20.1/ //进入目录
vim auto/cc/gcc //
nginx -s reload
vim src/core/nginx.h //此文件中隐藏版本号
nginx -s reload
./configure 重新编译安装
make
make install
cd objs/
du -h nginx 查看nginx大小,发现缩小很多
vim auto/cc/gcc
vim src/core/nginx.h
不显示版本号
改变前:
改变后:提高安全性
1.3 设置开机自启
vim /usr/lib/systemd/system/nginx.service
配置文件内容
[Unit]
Description=The NGINX HTTP and reverse proxy server
After=syslog.target 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
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target
systemctl daemon-reload ##刷新服务列表
systemctl enable --now nginx.service ##启动nginx服务
2.并发优化
cd /usr/local/nginx/conf
useradd -d /usr/local/nginx -M -s /sbin/nologin nginx //添加一个没有shell的用户
vim nginx.conf
//
user nginx;
worker_processes auto; //并发数由1变为自动
//
events {
worker_connections 65535; //允许访问量
}
//
cd /etc/pam.d
vim /etc/security/limits.conf
//
ngnix - nofile 65536 //最后一行加入最大访问数量
//
nginx -s eload
3.负载均衡
准备工作
vm1中,
scp -r /usr/local/nginx vm2:/usr/local/ //复制nginx到vm2
scp -r /usr/local/nginx vm3:/usr/local/ //复制nginx到vm3
nginx -t //测试
nginx -s reload
cd /usr/local/nginx/html
echo server1 > index.html 编辑默认发布页
vm2中,
添加nginx用户,建立软连接进行全局部署,并开启nginx服务
ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin // 软连接建立全局部署
useradd -d /usr/local/nginx/ -M -s /sbin/nologin nginx //添加用户
cd /usr/local/nginx/html
echo server2 > index.html //编辑测试页
nginx //启动服务
vm3中的部署同vm2中相同
ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin //软连接建立全局部署
useradd -d /usr/local/nginx/ -M -s /sbin/nologin nginx //添加用户
cd /usr/local/nginx/html
echo server3> index.html //编辑测试页
nginx //启动服务
3.1默认轮询(改配置文件后一定要重启nginx)
cd /usr/local/nginx/conf/
vim nginx.conf //修改配置文件
nginx.conf 中的代码
17 http {
18 upstream westos {
19 server 192.168.1.2:80; //添加主机
20 server 192.168.1.3:80; //添加主机
21 }
22
23 include mime.types;
24 default_type application/octet-stream;
25
120 server {
121 listen 80;
122 server_name www.westos.org;
123 location / {
124 proxy_pass http://westos; //反向代理
125 }
126 }
127 }
主机中进行地址解析
[root@localhost ~]# vim /etc/hosts
192.168.1.1 www.westos.org
主机中,进行测试
实现默认轮询
3.2设置权重
在不设置权重的情况下,权重默认为1;
设置server2的权重为2
结果如图,每连接两次server2,连接1次server3
3.3利用nginx服务器作为备用后端
将服务器作为备用后端,当vm2正常运行时,vm1不负载
让vm2宕掉,此时vm1开始运行
3.4 ip_hash
当设置ip_hash后,谁的权重大谁运行
4.平滑升级&版本回退
4.1 平滑升级
make
不要make install
cd /usr/local/lnmp/nginx/sbin
cp nginx nginx.old //备份原程序
cd objs/
\cp -f nginx /usr/local/nginx/sbin/ //拷贝新程序
ps ax |grep nginx
kill -USR2 9290
kill -WINCH 9290 //关闭原worker进程但保留主进程
nginx -v
4.2版本回退
cd /usr/local/nginx/sbin
[root@vm1 sbin]# \cp -f nginx.old nginx //还原nginx程序
[root@vm1 sbin]# ps ax |grep nginx
[root@vm1 sbin]# kill -HUP 9290 //唤醒原进程
[root@vm1 sbin]# ps ax |grep nginx
[root@vm1 sbin]# nginx -v
5. 算法扩展
vim /usr/local/nginx/conf/nginx.conf
sticky;
写入新模块
nginx并不支持sticky,此时要进行算法扩展
注释掉文件中的sticky,停掉nginx的服务,安装模块包
cd nginx-1.20.1/
make clean ##清理缓存
./configure --prefix=/usr/local/nginx --with-http_ssl_module --with-http_stub_status_module --with-file-aio --add-module=/root/nginx-goodies-nginx-sticky-module-ng-08a395c66e42
make
make install
重新写入sticky;
测试通过,成功写入;
6.限流
准备工作
在默认发布目录下,建立一个目录
6.1限制并发连接数
注意:vm1要装httpd
ab -c10 -n 10 http://172.25.73.1/download/vim.jpg ##并发用户数为10
当没有限制并发连接数时,请求全部通过
修改配置文件,限制连接;
[root@vm1 download]# vim /usr/local/nginx/conf/nginx.conf
[root@vm1 download]# nginx -s reload
34 limit_conn_zone $binary_remote_addr zone=addr:10m;
40 location /download/ {
41 limit_conn addr 1;
}
此时有未通过的请求
6.2 限制每秒请求数
35 limit_req_zone $binary_remote_addr zone=one:10m rate=10r/s;
40 location /download/ {
42 limit_req zone=one;
重启nginx,真机测压
在真机重新执行压力测试,因为每秒只通过一个,则其余9个被拒绝。
6.3排队,超过指定数量则排队访问
因为之前做过每秒只允许通过十个请求的限制,且一次访问只处理5个请求。除了第一个请求不需要排队外,完成所有请求大约要0.9秒左右。
6.4无延迟
没有等待时间,第一时间处理请求,剩余的请求会直接请求失败。
6.5限制带宽
该文件大概400多k,需要两秒
7. nginx配置管理
7.1自动索引
下载方便
7.2nginx exprie 缓存配置
缓存可以降低网站带宽,加速用户访问
设置缓存为365天,
查看信息可以看到缓存刚好是一年
7.3日志轮询
cd /opt/ ##该目录是系统自有的
每天轮询一次,删除之前的日志
生成了日志文件
7.4站点目录和文件的限制
禁用不必要的日志记录,以节省磁盘IO的消耗
禁止所有人访问,只允许主机访问
当在真机访问status目录时,拒绝访问,报错403,资源不可用,服务器理解客户的请求,但拒绝处理。
主机访问成功
7.5中文乱码
nginx不支持中文字符的,在html文件中,是文字;在访问浏览器时,中文默认会成为乱码。
设定nginx支持中文编码
8.重定向
8.1防止域名恶意解析到服务器ip
vim /usr/local/nginx/conf/nginx.conf
设定在访问本机时,返回500
8.2将所有访问重定向至指定域名
8.3 端口重定向
修改配置文件
36 server {
37 listen 80;
38 server_name www.westos.org;
39
40 rewrite ^(.*) http://www.westos.org/$1 permanent;
41 charset utf-8;
121 server {
122 listen 443 ssl;
123 server_name www.westos.org;
124
125 ssl_certificate cert.pem;
126 ssl_certificate_key cert.pem;
127
128 ssl_session_cache shared:SSL:1m;
129 ssl_session_timeout 5m;
130
131 ssl_ciphers HIGH:!aNULL:!MD5;
132 ssl_prefer_server_ciphers on;
133
134 location / {
135 root html;
136 index index.html index.htm;
137 }
138 }
139 }
在浏览器输入192.168.1.1自动 https 访问www.westos.org
8.4虚拟主机重定向
www.westos.org 重定向bbs.westos.org
bbs.westos.org 重定向www.westos.org
真机里面进行域名的地址解析
9.防盗链
盗链主机vm2
防盗主机vm1
配置盗链主机,在发布页中盗取vm1中的vim.jpg图片
盗取成功 通过vm2可以访问到vm1中的图片
在vm1的配置文件中 加入防盗链,重新启动nginx
此时通过vm2无法获取vm1中的图片