nginx(web服务器)实现负载均衡
nginx配置环境变量配置环境变量三部曲: ./configure----> make ----> make install官网下载社区版网址:nginx.org社区版官网下载商业版网址:nginx.com商业版知道./configure不出错之后,执行make 和make install...
nginx
1. 配置环境变量
三部曲: ./configure ----> make ----> make install
官网下载社区版网址:nginx.org
社区版
官网下载商业版网址:nginx.com
商业版
知道./configure不出错之后,执行make 和make install
编辑gcc文件,关掉debug
2. nginx并发优化
2.1 书写nginx的配置文件(前期工作)
- nginx作为http服务器时:
max_clients = worker_processes * worker_connections
- nginx作为反向代理服务器时:
max_clients = worker_processes * worker_connections / 2
worker_processes的配置
测试:
ab( apache bench )是apache下的一个工具,主要 用于对web站点做压力测试
基础用法:
其中-c选项为一次发送的请求数量,即并发量。
-n选项为请求次数。
worker_connections 单个工作进程并发连接数nginx作为http服务器时:
max_clients = worker_processes * worker_connections
nginx作为反向代理服务器时:
max_clients = worker_processes * worker_connections / 2
;和user 的设定
- nginx.conf
#user nobody;
events {
worker_connections 65535; ##设置工作的连接数
}
修改用户进程可打开文件数限制
2.2 worker_cpu_affinity 01 10;
- worker_cpu_affinity 01 10; //cpu有多少个核,就有几位数,1代表内核开启,
- 0代表内核关闭;
- multi_accept on; //告诉nginx收到一个新连接通知后接受尽可能多的连接
- use epoll; //使用epoll模型
- 开启文件高效传输模式,同时设置tcp_nopush 和tcp_nodelay 为on,可以防止网路和磁盘IO阻塞。
sendfile on;
tcp_nopush on;
tcp_nodelay on;
这里我使用auto,就不是用上面的方法了,俩者都一样。
2.3 负载均衡实验
首先打开server2和server3的apache服务,并且写好默认发布文件index.html
配置负载均衡文件vim nginx.conf
backup
weight权重
ip_hash如果使用的是server3,那么就一直保持使用server3,除非3坏了
sticky cookie(专业版才可以使用的,但是还是有办法实现社区版使用的)
首先需要下载一个模块和一个服务文件,可以从下面网盘获取。‘
然后开始操作。
- daemon-reload: 重新加载某个服务的配置文件,如果新安装了一个服务,归属于 systemctl 管理,要是新服务的服务程序配置文件生效,需重新加载。
3. nginx平滑升级和版本回退
- 一、版本升级
- 1. 下载nginx新版本软件,正常执行./configure 和make 但不要执行make install
- 2. 备份原程序:
cd /usr/local/lnmp/nginx/sbin
cp nginx nginx.old
- 3. 拷贝新程序:
cd nginx-1.19.1/objs
\cp -f nginx /usr/local/lnmp/nginx/sbin ##\可以去除询问,直接执行
- 4. 获取当前nginx主进程pid:
# ps ax|grep nginx
29636 ? Ss 0:00 nginx: master process nginx
29637 ? S 0:00 nginx: worker process
29638 ? S 0:00 nginx: worker process
- 5. 升级新程序:
# kill -USR2 29636
# ps ax|grep nginx
29636 ? Ss 0:00 nginx: master process nginx
29637 ? S 0:00 nginx: worker process
29638 ? S 0:00 nginx: worker process
29761 ? S 0:00 nginx: master process nginx
29762 ? S 0:00 nginx: worker process
29763 ? S 0:00 nginx: worker process
- 6.关闭原worker进程但保留主进程:为了回退
# kill -WINCH 29636
# ps ax|grep nginx
29636 ? Ss 0:00 nginx: master process nginx
29761 ? S 0:00 nginx: master process nginx
29762 ? S 0:00 nginx: worker process
29763 ? S 0:00 nginx: worker process
- 二、版本回退
- 1. 版本回退:
还原nginx程序:# cp -f nginx.old nginx
唤醒原进程:# kill -HUP 29636
回收新版本的worker进程: kill -WINCH 29761
关闭新版本主进程: kill -QUIT 29761
版本升级
老版本的/usr/local/nginx/sbin/nginx文件备份
高版本的操作
出错后的修改步骤
版本回退
错误问题
4. nginx限流
- 控制单IP并发连接数:
http {
limit_conn_zone $binary_remote_addr zone=addr:10m;
//$binary_remote_addr 表示通过remote_addr这个标识来做限制
//zone=addr:10m 表示生成一个大小为10M,名字为addr的内存区域
...
server {
location /download/ {
limit_conn addr 1; #限制并发数
limit_rate 50k; #限制带宽
}
}
- 限制单位时间内的请求数目,以及速度限制:
http {
limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;
//rate=1r/s表示允许相同标识的客户端的访问频次,这里限制的是每秒1次
...
server {
location / {
limit_req zone=one; ##限制请求数目为1
# limit_req zone=one burst=5 ##5个人排队
# limit_req zone=one burst=5 nodelay; ##没有延时
}
}
控制单IP并发连接数
限制单位时间内的请求数目,以及速度限制
限制带宽
5.nginx配置管理
- 自动索引:下载方便
location / {
autoindex on;
}
- Nginx expire缓存配置: 缓存可以降低网站带宽,加速用户访问
location ~ .*\.(gif|jpg|png)$ {
expires 365d;
root /www;
}
- 日志轮询:
- # cat nginxlog.sh
#!/bin/bash
cd /usr/local/nginx/logs && mv access.log access_$(date +%F -d -1day).log
kill -USR1 `cat /usr/local/nginx/logs/nginx.pid`
- 再加入crontab定时任务
00 00 * * * /opt/scripts/nginxlog.sh &> /dev/null
为了安全,日志目录不需要给你nginx用户访问权限
# chmod -R 700 /usr/local/nginx/logs
- 禁用不必要的日志记录,以节省磁盘IO的消耗
location ~ .*\.(js|jpg|jpeg|png|css|bmp|gif)$ {
access_log off;
}
- 站点目录和文件的限制
location ~ ^/images/.*\.(sh|php)$ {
deny all;
}
- 中文乱码
charset utf-8;
自动索引:下载方便
Nginx expire缓存配置: 缓存可以降低网站带宽,加速用户访问
日志轮询:
禁用没用的日志
访问文件的限制
中文乱码
限制IP
6. nginx重定向
- 防止域名恶意解析到服务器IP:
server {
listen 80;
server_name _;
return 500;
}
- 也可以重定向:
server {
listen 80;
server_name _;
rewrite ^(.*) http://www.westos.org permanent;
}
- 80重定向443:
server {
listen 80;
server_name www.westos.org;
rewrite ^/(.*)$ https://www.westos.org/$1 permanent;
}
- www.westos.org/bbs 重定向bbs.westos.org:
rewrite ^/bbs$ http://bbs.westos.org permanent;
rewrite ^/bbs/(.*)$ http://bbs.westos.org/$1 permanent;
- bbs.westos.org 重定向www.westos.org/bbs:
if ($host = "bbs.westos.org"){
rewrite ^/(.*)$ http://www.westos.org/bbs/$1 permanent;
}
== 防止域名恶意解析到服务器IP==
== 重定向==
80重定向443
创建密钥和证书
真机访问查看效果
上面只是生成证书,然后需要手动输入https://www.westos.org。以下操作是当访问www.westos.org时自动跳转到https://www.westos.org
www.westos.org/bbs 重定向bbs.westos.org
bbs.westos.org 重定向www.westos.org/bbs:
7. 防盗链
- location ~ \.(jpg|png)$ {
valid_referers none blocked www.westos.org;
if ($invalid_referer) {
return 403;
#rewrite ^/ http://www2.westos.org/daolian.jpg;
}
}
server2主机
真机
server1
防盗链的设置
直接访问的是server3下的/var/www/html/下的daolian.jpg
更多推荐
所有评论(0)