1.通过nginx命令控制nginx服务
nginx -c /path/nginx.conf # 以特定目录下的配置文件启动nginx:
nginx -s reload # 修改配置后重新加载生效
nginx -s reopen # 重新打开日志文件
nginx -s stop # 快速停止nginx
nginx -s quit # 完整有序的停止nginx
nginx -t # 测试当前配置文件是否正确
nginx -t -c /path/to/nginx.conf # 测试特定的nginx配置文件是否正确
2.通过stub_status模块监控nginx的工作状态(etc/nginx/conf.d/default.conf)
#添加以下内容~~
location /nginx-status {
stub_status on;
access_log /var/log/nginx/nginxstatus.log; #设置日志文件的位置
auth_basic "nginx-status"; #指定认证机制(与location后面的内容相同即可)
auth_basic_user_file /etc/nginx/htpasswd; #指定认证的密码文件
}
3.创建认证口令文件并添加用户mm,密码用md5加密
yum -y install httpd-tools
#htpasswd 是开源 http 服务器 apache httpd 的一个命令工具,用于生成 http 基本认证的密码文件
htpasswd -c -m /etc/nginx/htpasswd mm
4. 使用limit_rate限制客户端传输数据的速度
location / {
root /var/www/nginx/;
index index.html index.htm;
limit_rate 2k; #对每个连接的限速为2k/s
}
5.查看报错日志(找到错误日志)
[root@localhost ~]# cat /var/log/nginx/error.log
2023/10/27 04:00:57 [error] 6702#0: *14 "/root/html/index.html" is forbidden (13: Permission denied), client: 10.219.24.1, server: web.1000cc.com, request: "GET / HTTP/1.1", host: "web.1000cc.com"
6.nginx负载均衡
当你的nginx服务器给2台web服务器做代理,负载均衡算法采用轮询,当web1坏掉后,nginx服务器首先请求web1,再响应超时后,把请求分发给web2,来继续运转
此代码为两台web机的配置
upstream testapp {
server 10.0.105.199:8081;
server 10.0.105.202:8081;
}
server {
listen 80;
server_name localhost;
location / {
proxy_pass http://testapp; #请求转向 testapp 定义的服务器列表
}
upstream mysvr {
server http://10.0.105.199:8081;
server http://10.0.105.202:8081;
}
server {
listen 80;
server_name localhost;
location / {
proxy_pass http://mysvr; #请求转向mysvr 定义的服务器列表
}
1.热备:在第二台虚拟机ip端口后加上 backup;代表热备
2.轮询:nginx默认为轮询其权重都默认为1,服务器请求数据:abababab...
3.加权轮询:server 172.17.14.2:8080 weight=1; 在后面加上weight
server 172.17.14.3:8080 weight=2;
4.ip_hash:nginx会让相同的客户端ip请求相同服务器
5.nginx负载均衡配置状态参数
-
down,表示当前的server暂时不参与负载均衡。
-
backup,预留的备份机器。当其他所有的非backup机器出现故障或者忙的时候,才会请求backup机器,因此这台机器的压力最轻。
-
max_fails,允许请求失败的次数,默认为1。当超过最大次数时,返回proxy_next_upstream 模块定义的错误。
-
fail_timeout,在经历了max_fails次失败后,暂停服务的时间单位秒。max_fails可以和fail_timeout一起使用。
upstream myweb {
server 172.17.14.2:8080 weight=2 max_fails=2 fail_timeout=2;
server 172.17.14.3:8080 weight=1 max_fails=2 fail_timeout=1;
}
7.nginx会话保持
ip_hash(哈希算法)
upstream backend {
ip_hash;
server backend1.example.com;
server backend2.example.com;
server backend3.example.com down;
}
ip_hash使用源地址哈希算法,将同一客户端的请求总是发往同一个后端服务器,除非该服务器不可用。
当后端服务器宕机后,session会丢失; 来自同一局域网的客户端会被转发到同一个后端服务器,可能导致负载失衡; 不适用于CDN网络,不适用于前段还有代理的情况。
8.nginx 实现动静分离
使用正则表达式匹配过滤,然后交给不同的服务器
(动态资源需要使用php,先下载好php)
upstream static {
server 10.0.105.196:80 weight=1 max_fails=1 fail_timeout=60s;
}
upstream php {
server 10.0.105.200:80 weight=1 max_fails=1 fail_timeout=60s;
}
server {
listen 80;
server_name localhost;
#动态资源加载
location ~ \.(php|jsp)$ {
proxy_pass http://php;
proxy_set_header Host $host:$server_port;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
#静态资源加载
location ~ .*\.(html|gif|jpg|png|bmp|swf|css|js)$ {
proxy_pass http://static;
proxy_set_header Host $host:$server_port;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
9.nginx防盗链问题
两个网站 A和B,A网站引用了B网站上的图片,这种行为为盗链,防盗链为防止A引用B的图片
noon:允许没有http_refer的请求访问资源;加noon的话本地可以访问,其他人无法访问
blocked:允许不是http://开头的,不带协议的请求访问资源;
server_names:只允许指定ip/域名来请求访问资源(白名单)
实验:准备两台机器,
server {
listen 80;
server_name localhost;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
valid_referers none blocked *.cc.com 10.0.105.202;
if ($invalid_referer) {
return 502;
}
}
location ~ .*\.(gif|jpg|png|jpeg)$ {
root /usr/share/nginx/html;
valid_referers qf.com 10.0.105.202;
if ($invalid_referer) {
return 403;
}
}
}
第二台机器客户端
配置nginx访问页面
创建页面
[root@nginx-server nginx]# vim index.html
<html>
<head>
<meta charset="utf-8">
<title>qf.com</title>
</head>
<body style="background-color:red;">
<img src="http://10.0.105.202/test.jpg"/>
</body>
</html>测试不带http_refer:
[root@nginx-server nginx]# curl -I "http://10.0.105.202/test1.png"
HTTP/1.1 200 OK
Server: nginx/1.16.0
Date: Thu, 27 Jun 2019 16:21:13 GMT
Content-Type: image/png
Content-Length: 235283
Last-Modified: Thu, 27 Jun 2019 11:27:11 GMT
Connection: keep-alive
ETag: "5d14a80f-39713"
Accept-Ranges: bytes测试带非法http_refer:
[root@nginx-server nginx]# curl -e http://www.baidu.com -I "http://10.0.105.202/test.jpg"
HTTP/1.1 403 Forbidden
Server: nginx/1.16.0
Date: Thu, 27 Jun 2019 16:22:32 GMT
Content-Type: text/html
Content-Length: 153
Connection: keep-alive测试带合法的http_refer:
[root@nginx-server nginx]# curl -e http://10.0.105.202 -I "http://10.0.105.202/test.jpg"
HTTP/1.1 200 OK
Server: nginx/1.16.0
Date: Thu, 27 Jun 2019 16:23:21 GMT
Content-Type: image/jpeg
Content-Length: 27961
Last-Modified: Thu, 27 Jun 2019 12:28:51 GMT
Connection: keep-alive
ETag: "5d14b683-6d39"
Accept-Ranges: bytes