共计 4532 个字符,预计需要花费 12 分钟才能阅读完成。
Nginx (“engine x”) 是一个高性能的 HTTP 和反向代理服务器,也是一个 IMAP/POP3/SMTP 代理服务器。Nginx 是由 Igor Sysoev 为俄罗斯访问量第二的 Rambler.ru 站点开发的,它已经在该站点运行超过两年半了。Igor 将源代码以类 BSD 许可证的形式发布。
Nginx 超越 Apache 的高性能和稳定性,使得国内使用 Nginx 作为 Web 服务器的网站也越来越多,其中包括新浪博客、新浪播客、网易新闻等门户网站频道,六间房、56.com 等视频分享网站,Discuz! 官方论坛、水木社区等知名论坛,豆瓣、YUPOO 相册、海内 SNS、迅雷在线等新兴 Web 2.0 网站。
一、常见的 502 问题解决
nginx 虚拟主机网站的配置文件里的 fastcgi_pass 使用的 socket 和 php-fpm.conf 配置文件里监听的 socket 文件名不同。
php-fpm 的线程用完了
使用的 socket 文件的属主和属组和跑 nginx 线程的属主属组不同。
二、nginx 用户认证
我们对 www.test.com/admin.php 做一个用户认证
vim /usr/local/nginx/conf/vhosts/test.conf 编辑虚拟主机的配置文件
更改内容如下:红色部分是增加的部分
server
{
listen 80;
server_name www.test.com;
index index.html index.htm index.php;
root /data/www;
location ~ .*admin\.php$ {
auth_basic “cct auth”;
auth_basic_user_file /usr/local/nginx/conf/.htpasswd;
include fastcgi_params;
fastcgi_pass unix:/tmp/www.sock;
#fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /data/www$fastcgi_script_name;
}
htpasswd -c /usr/local/nginx/conf/.htpasswd cct 建立密码文件,指定用户名 cct 和密码
注意的是,htpasswd 工具要先安装 apache,yum install -y httpd
三、域名跳转
vim /usr/local/nginx/conf/vhosts/test.conf
加入以下内容
server_name www.test.com www.aaa.com www.bbb.com; #设定多个域名
if ($host != ‘www.test.com’)
{
rewrite ^/(.*)$ http://www.test.com/$1 permanent; #跳转规则 跳转的规则
}
四、不记录指定文件类型日志
vim /usr/local/nginx/conf/nginx.conf
log_format cct ‘$remote_addr $http_x_forwarded_for [$time_local]’ #红字部分可以自定义
‘$host “$request_uri” $status’
‘”$http_referer” “$http_user_agent”‘;
在 /usr/local/nginx/conf/vhosts/test.conf 里加入
access_log /tmp/nginx_access.log cct; 红字对应
下列加入虚拟主机配置文件里
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ #限定.gif 等文件的日志
{
access_log off;
}
location ~ (static|cache) #限定带有 static 和 cache 的日志
{
access_log off;
}
五、日志切割
和 apache 不同的是,nginx 没有 apache 一样的工具做切割,需要编写脚本实现。
在 /usr/local/sbin 下写脚本
#!/bin/bash
dd=$(date -d ‘-1 day’ +%F)
[-d /tmp/nginx_log] || mkdir /tmp/nginx_log
mv /tmp/nginx_access.log /tmp/nginx_log/$dd.log
/etc/init.d/nginx reload > /dev/null
六、配置静态文件过期时间
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
{
access_log off;
expires 15d; #保存 15 天
}
location ~ \.(js|css)
{
access_log off;
expires 2h; #保存两个小时
}
curl -x127.0.0.1:80 http://www.test.com/static/image/common/logo.png -I #测试图片的 max-age
七、配置防盗链
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|flv|rar|zip|bz2|gz)$
{
access_log off;
expires 15d;
valid_referers none blocked *.test.com *.aaa.com ; # 设置白名单
if($invalid_referer) # 其余的返回 403
{
return 403;
}
}
curl -e “http://www.test.com/” -I -x127.0.0.1:80 ‘http://www.test.com/static/image/common/logo.png’ #返回 200 正常可以调用
curl -e “http://www.baidu.com/” -I -x127.0.0.1:80 ‘http://www.test.com/static/image/common/logo.png’ 返回 403
curl - e 指定 referer 时,要带上 http://
八、nginx 访问控制
可以设置一些配置禁止一些 ip 的访问
deny 127.0.0.1; #全局定义限制,location 里的是局部定义的。如果两者冲突,以 location 这种精确地优先,
location ~ .*admin\.php$ {
#auth_basic “cct auth”;
#auth_basic_user_file /usr/local/nginx/conf/.htpasswd;
allow 127.0.0.1; 只允许 127.0.0.1 的访问,其他均拒绝
deny all;
include fastcgi_params;
fastcgi_pass unix:/tmp/www.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /data/www$fastcgi_script_name;
}
当定义了匹配对象的时候是优先匹配。也就是越精准越优先。当没有定义匹配对象的时候,是从上到下逐条匹配。
九、禁止指定 user_agent
虚拟主机的配置文件里加入:
if ($http_user_agent ~* ‘baidu|360|sohu’) #禁止 useragent 为 baidu、360 和 sohu,~* 表示不区分大小写匹配
{
return 403;
}
location / 和 location ~ / 优先级是不一样的。
结合这个文章研究一下吧 http://blog.itpub.net/27181165/viewspace-777202/
curl -A “baidu” -x127.0.0.1:80 www.test.com/forum.php -I 该命令指定百度为 user_agent, 返回 403
十、nginx 代理
在 vhosts 目录下,vim proxy.conf
upstream cct{#自定义的
server 111.13.100.91:80; #对应 www.baidu.com 的两个 ip 地址
server 111.13.100.92:80;
}
server{
listen 80;
server_name www.baidu.com;
location / {
proxy_pass http://cct/; #若只有一个 IP 地址,将 cct 替换成为 IP 地址,再将 upstream 模块去掉
proxy_set_header Host $host; #多个 ip 地址要把这一行加上,否则会出现 502 错误
#proxy_set_header X-Real-IP $remote_addr;
}
}
dig www.baidu.com 获得域名的多个 IP 地址
也可以用 nginx 做简单的负载均衡
CentOS 7.2 下编译安装 PHP7.0.10+MySQL5.7.14+Nginx1.10.1 http://www.linuxidc.com/Linux/2016-09/134804.htm
搭建基于 Linux6.3+Nginx1.2+PHP5+MySQL5.5 的 Web 服务器全过程 http://www.linuxidc.com/Linux/2013-09/89692.htm
CentOS 6.3 下 Nginx 性能调优 http://www.linuxidc.com/Linux/2013-09/89656.htm
CentOS 6.3 下配置 Nginx 加载 ngx_pagespeed 模块 http://www.linuxidc.com/Linux/2013-09/89657.htm
CentOS 6.4 安装配置 Nginx+Pcre+php-fpm http://www.linuxidc.com/Linux/2013-08/88984.htm
Nginx 安装配置使用详细笔记 http://www.linuxidc.com/Linux/2014-07/104499.htm
Nginx 日志过滤 使用 ngx_log_if 不记录特定日志 http://www.linuxidc.com/Linux/2014-07/104686.htm
Nginx 的 500,502,504 错误解决方法 http://www.linuxidc.com/Linux/2015-03/115507.htm
CentOS 7 编译安装 Nginx1.10.2 脚本启动失败解决思路 http://www.linuxidc.com/Linux/2017-01/139794.htm
Nginx 的详细介绍 :请点这里
Nginx 的下载地址 :请点这里
本文永久更新链接地址 :http://www.linuxidc.com/Linux/2017-01/140070.htm