Nginx常见问题
keepalived多台机器vip漂移
抢占式
# 安装nginx和keepalived
yum install -y nginx keepalived
# 主节点配置文件
global_defs {
router_id lb01
}
vrrp_script ljy {
script "/root/check_web.sh"
interval 1
}
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 50
priority 150
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.0.0.3
}
track_script {
ljy
}
}
# 备节点配置文件
global_defs {
router_id lb02
}
vrrp_script ljy {
script "/root/check_web.sh"
interval 1
}
vrrp_instance VI_1 {
state BACKUP
interface eth0
virtual_router_id 50
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.0.0.3
}
track_script {
ljy
}
}
global_defs {
router_id lb03
}
vrrp_script ljy {
script "/root/check_web.sh"
interval 1
}
vrrp_instance VI_1 {
state BACKUP
interface eth0
virtual_router_id 50
priority 50
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.0.0.3
}
track_script {
ljy
}
}
非抢占式
global_defs {
router_id lb01
}
vrrp_script ljy {
script "/root/check_web.sh"
interval 1
}
vrrp_instance VI_1 {
state BACKUP
interface eth0
virtual_router_id 50
priority 120
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.0.0.3
}
track_script {
ljy
}
}
global_defs {
router_id lb02
}
vrrp_script ljy {
script "/root/check_web.sh"
interval 1
}
vrrp_instance VI_1 {
state BACKUP
interface eth0
virtual_router_id 50
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.0.0.3
}
track_script {
ljy
}
}
global_defs {
router_id lb03
}
vrrp_script ljy {
script "/root/check_web.sh"
interval 1
}
vrrp_instance VI_1 {
state BACKUP
interface eth0
virtual_router_id 50
priority 50
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.0.0.3
}
track_script {
ljy
}
}
Nginx多server匹配优先级
##域名查找是后往前查询的先查根域
1.精确匹配 www.test1.com
2.通配符在前面的域名 *.test1.com
3.通配符在后面的域名 www.test1.*
4.使用正则表达式的域名 (blog|www).test1.com
5.在listen端口后面加default_server的域名
6.最后才按照配置文件的先后顺序
nginx禁止IP访问
[root@web01 conf.d]# vim server2.conf
server {
listen 80 default_server;
server_name _;
#使用return跳转到404
return 404;
#使用return跳转到主页面
return http://www.test1.com/$request_uri;
#使用rewrite跳转到主页面
rewrite (.*) http://www.test1.com/$1;
}
# 配置主站点
server{
listen 80;
server_name www.test1.com;
location / {
root /code/www;
index index.html;
}
}
# 优化后的404页面
server{
listen 80;
server_name www.test1.com;
location / {
root /code/www;
index index.html;
}
error_page 404 /404.html;
location = /code/www/404.html {
}
}
server {
listen 80 default_server;
server_name _;
return http://www.test1.com/error;
}
nginx灵活运用include
# 1.创建两个目录
mkdir /etc/nginx/conf.d/online
mkdir /etc/nginx/conf.d/offline
# 2.把开启需要的配置文件放入online
# 3.修改nginx主配置文件
vim /etc/nginx/nginx.conf
include /etc/nginx/conf.d/online/*.conf;
# 4.目录结构展示
[root@web01 conf.d]# tree
.
├── offline
│ ├── blog.conf
│ ├── cdx.conf
│ ├── daili.conf
│ ├── default.conf
│ ├── diannao.conf
│ ├── dl.conf
│ ├── keep.conf
│ ├── pc.conf
│ ├── test.conf
│ └── wz.conf
└── online
├── deny_ip.conf
└── www.conf
nginx站点目录路径
# 使用的是相对路径,需要把文件放入location指定的目录下
root /code/www;
# 使用的是绝对路径,只需把文件放入所在站点目录下
alias /code/www;
# 编写图片文件
vim online/image.conf
server{
listen 80;
server_name www.test1.com;
location /picture {
root /code;
}
}
# 创建图片存放站点目录
mkdir -p /code/picture
/code/10.jpg
## alias线上配置
server{
listen 80;
server_name www.test1.com;
location /picture {
root /code;
}
location ~* ^.*\.(png|jpg|gif)$ {
alias /code/images/;
}
}
nginx的try_files使用
vim online/try.conf
server{
listen 80;
server_name www.test1.com;
location / {
try_files $uri $uri/ @java;
location @java {
proxy_pass http://10.0.0.8:8080;
}
}
作业:
1.防盗链
#防盗链配置
server {
listen 80;
server_name www.png.com;
root /code;
index index.html;
location / {
}
location ~ .*\.(png|jpg|gif)$ {
valid_referers none blocked www.baidu.com;
if ($invalid_referer){
# rewrite ^//ssss.png break;
return 403;
}
}
}
location ~ .*\.(png|jpg|gif)$
location:输入的url后面跟的路径,如果路径与location后的内容相匹配就执行location下的内容
~:开始正则匹配
.*:.表示出换行符/n之外的所有字符,*就是匹配0次或多次。
\.:\转译符号将具有特殊含义的字符,转为纯字符型,.这里有包含任意字符的意思,所以需要转译
(png|jpg|gif)$:表示结尾要是以png、jpg、gif为结尾
valid_referers none blocked www.baidu.com
这个是如果返回的头部referer为www.baidu.com那么就不会执行valid_referer下面内容,反之就会
if ($invalid_referer)
这个含义就是结合上面的valid_referer,如果请求头部为www.baidu.com,那么就$invalid_referer就会被赋值为0,就不会执行返回错误代码401,如果不是www.baidu.com,那么就会赋值为1,就会执行下面内容
return 403:返回错误代码403
2.隐藏nginx版本
#修改nginx主配置文件,在配置文件中加入以下配置重启即可。
server_tokens off;
3.如何开启gzip压缩访问
在http块内或者在单个server块里添加后重启nginx ./nginx -s reload
#开启gzip
gzip on;
#低于1kb的资源不压缩
gzip_min_length 1k;
#压缩级别1-9,越大压缩率越高,同时消耗cpu资源也越多,建议设置在5左右。
gzip_comp_level 5;
#需要压缩哪些响应类型的资源,多个空格隔开。不建议压缩图片.
gzip_types text/plain application/javascript application/x-javascript text/javascript text/xml text/css;
#配置禁用gzip条件,支持正则。此处表示ie6及以下不启用gzip(因为ie低版本不支持)
gzip_disable "MSIE [1-6]\.";
#是否添加“Vary: Accept-Encoding”响应头
gzip_vary on;
rpm删除所有相关安装包
# rpm搜索安装包
rpm -qa|grep server
# 删除搜索到的安装包
rpm -e $(rpm -qa|grep server)
# 再次通过rpm搜索安装包
rpm -qa|grep server