笔记目录
- Nginx默认虚拟主机
- Nginx用户认证
- Nginx域名重定向
- Nginx访问日志
- Nginx日志切割
- 静态文件不记录日志和过期时间
- Nginx防盗链
- Nginx访问控制
- Nginx解析PHP相关配置
- Nginx代理
- 扩展:
nginx.conf 配置详解
https://coding.net/u/aminglinux/p/nginx/git/tree/master/3z
nginx rewrite四种flag
http://unixman.blog.51cto.com/10163040/1711943
https://coding.net/u/aminglinux/p/nginx/git/blob/master/rewrite/break.md
502问题汇总 http://ask.apelearn.com/question/9109
location优先级 https://coding.net/u/aminglinux/p/nginx/git/blob/master/location/priority.md
https://coding.net/u/aminglinux/p/nginx/git/blob/master/location/priority.md
一.Nginx默认虚拟主机
示例一:
- vim /usr/local/nginx/conf/nginx.conf //增加
- include vhost/*.conf 这是要添加的内容
- mkdir /usr/local/nginx/conf/vhost 创建目录
- cd !$ 进入目录下
- vim default.conf //编辑文件,加入如下内容
server
{
listen 80 default_server; // 定义它的监听端口,有这个标记的就是默认虚拟主机
server_name aaa.com; 域名
index index.html index.htm index.php; 指定索引页
root /data/wwwroot/default; 指定网址位置
}
- mkdir -p /data/wwwroot/default/ 创建目录
- cd !$ 进入目录下
- echo “This is a default site.”>/data/wwwroot/default/index.html 创建一个index.html文件并写入一些内容
- /usr/local/nginx/sbin/nginx -t 检查一下
- /usr/local/nginx/sbin/nginx -s reload 重新加载一下配置文件
- curl localhost 测试访问一下
- curl -x127.0.0.1:80 123.com 指定一个域名,测试访问一下
- 不管访问什么域名,只要解析指向到这个服务器,都会访问到该站点,这就是默认虚拟主机
二.Nginx用户认证
示例一:用户认证
- vim /usr/local/nginx/conf/vhost/test.com.conf//创建一个虚拟主机,写入如下内容
server
{
listen 80;
server_name test.com;
index index.html index.htm index.php;
root /data/wwwroot/test.com;
location /
{
auth_basic "Auth"; 用户认证的名字
auth_basic_user_file /usr/local/nginx/conf/htpasswd; 用户名密码文件
}
}
- yum install -y httpd yum安装httpd,使用htpasswd工具
- htpasswd -c /usr/local/nginx/conf/htpasswd aming 生成用户密码,-c是生成的意思,如果生成第二个则不需要用-c,不然会重置
- /usr/local/nginx/sbin/nginx -t 检查语法是否有错误
- /usr/local/nginx/sbin/nginx -s reload //测试配置并重新加载配置文件
- mkdir /data/wwwroot/test.com 创建目录
- echo “test.com”>/data/wwwroot/test.com/index.html 建立一个html文件
- curl -x127.0.0.1:80 test.com -I//状态码为401说明需要验证
- curl -uaming:passwd -x127.0.0.1:80 test.com 访问状态码变为200
- 编辑windows的hosts文件,然后在浏览器中访问test.com会有输入用户、密码的弹窗
示例二:针对目录的用户认证
- vi test.com.conf 编辑文件,做如下更改
location /admin/
{
auth_basic "Auth";
auth_basic_user_file /usr/local/nginx/conf/htpasswd;
}
- 用curl 测试
- 新建一个测试html文件,并测试一下
示例三:针对php做限制,如下更改
- vi test.com.conf 编辑文件
三.Nginx域名重定向
示例一:
- 更改test.com.conf 编辑文件:
server ,如下
{
listen 80;
server_name test.com test1.com test2.com; 配置域名,而且可以配置多个域名
index index.html index.htm index.php;
root /data/wwwroot/test.com;
if ($host != 'test.com' )
{
rewrite ^/(.*)$ http://test.com/$1 permanent; 指定调整到哪个域名下,permanent指定301状态码
}
}
- server_name后面支持写多个域名,这里要和httpd的做一个对比 permanent为永久重定向,状态码为301,如果写redirect则为302
- 检查语法并重新加载配置文件
- curl 测试一下,任意域名都会重定向到指定域名下
四.Nginx访问日志
示例一:
- 日志格式
- vim /usr/local/nginx/conf/nginx.conf //搜索log_format
$remote_addr | 客户端IP(公网IP) |
$http_x_forwarded_for | 代理服务器的IP |
$time_local | 服务器本地时间 |
$host | 访问主机名(域名) |
$request_uri | 访问的url地址 |
$status | 状态码 |
$http_referer | referer |
$http_user_agent | user_agent |
- 除了在主配置文件nginx.conf里定义日志格式外,还需要在虚拟主机配置文件中增加
- vim test.com.conf
- access_log /tmp/1.log combined_realip;
- 这里的combined_realip就是在nginx.conf中定义的日志格式名字
- -t && -s reload 检查语法并重新加载配置文件
- curl -x127.0.0.1:80 test.com -I 测试
- cat /tmp/1.log 查看日志文件
五.Nginx日志切割
示例一:因为Nginx不自带日志切割工具,所以自定义脚本借用
- 自定义shell 脚本
- vim /usr/local/sbin/nginx_log_rotate.sh//写入如下内容
#! /bin/bash
## 假设nginx的日志存放路径为/data/logs/
d=`date -d "-1 day" +%Y%m%d` 生成昨天的日期
logdir="/data/logs" 定义存放位置
nginx_pid="/usr/local/nginx/logs/nginx.pid" 定义位置,找他的pid
cd $logdir 进入目录下
for log in `ls *.log` 做个for循环
do
mv $log $log-$d 做一个改名操作
done
/bin/kill -HUP `cat $nginx_pid` 重新加载一下,生成新的日志文件
- 执行一下这个脚本来看看效果,执行过程
- ls /tmp/ 看一下
- 在做一个任务计划 ,每天0.0分执行该脚本
- crontab -e 编辑如下
0 0 * * * /bin/bash /usr/local/sbin/nginx_log_rotate.sh
六.静态文件不记录日志和过期时间
示例一:
- vi test.com.conf
- 配置如下
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
{
expires 7d; 定义过期时间
access_log off; 关闭日志记录
}
location ~ .*\.(js|css)$
{
expires 12h;
access_log off;
}
- -t &&reload 检测语法,并重新加载一下配置文件
- 测试,先创建两个以图片结尾的文件
cd /data/wwwroot/test.com
vim 1.gif
vim 2.js
- curl测试一下
- 查看日志是否记录
- 测试过期时间
七.Nginx防盗链
示例一:
- 配置如下,可以和上面的配置结合起来
- vi /usr/local/nginx/conf/vhost/test.com.conf
location ~* ^.+\.(gif|jpg|png|swf|flv|rar|zip|doc|pdf|gz|bz2|jpeg|bmp|xls)$
{
expires 7d;
valid_referers none blocked server_names *.test.com ; 定义白名单
if ($invalid_referer) { 如果不是白名单,返回403
return 403;
}
access_log off;
}
- 配置完成如图
- -t && reload 检测语法并重新加载配置文件
- 用curl 测试一下,-e 指定
八.Nginx访问控制
示例一:
- 需求:访问/admin/目录的请求,只允许某几个IP访问,配置如下:
- vi /usr/local/nginx/conf/vhost/test.com.conf
location /admin/
{
allow 192.168.133.1;
allow 127.0.0.1;
deny all;
}
- mkdir /data/wwwroot/test.com/admin/
- echo “test,test”>/data/wwwroot/test.com/admin/1.html
- -t && -s reload 检查语法并重新加载配置文件
- 测试:
- curl -x127.0.0.1:80 test.com/admin/1.html -I
- curl -x192.168.133.130:80 test.com/admin/1.html -I
- curl -x 192.168.142.128:80 test.com/admin/
示例二:禁止解析php
- 可以匹配正则
- vi /usr/local/nginx/conf/vhost/test.com.conf
location ~ .*(abc|image)/.*\.php$
{
deny all;
}
- -t && reload 检测语法,并重新加载配置文件
- 用curl测试一下
示例三:根据user-agent限制
- vi /usr/local/nginx/conf/vhost/test.com.conf
if ($http_user_agent ~ 'Spider/3.0|YoudaoBot|Tomato')
{
return 403;
}
- deny all和return 403效果一样
- -t && reload 检测语法,并重新加载配置文件
- 用curl 检测一下
- 如果想忽略大小写,就如下在~ 后添加一个*号就行了
九.Nginx解析PHP相关配置
示例一:
- vi /usr/local/nginx/conf/vhost/test.com.conf
- 配置如下:
location ~ \.php$
{
include fastcgi_params;
fastcgi_pass unix:/tmp/php-fcgi.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME
/data/wwwroot/test.com$fastcgi_script_name;
}
- fastcgi_pass 用来指定php-fpm监听的地址或者socket
示例二:502解决方法
十.Nginx代理
示例一:
- cd /usr/local/nginx/conf/vhost 进入目录下
- vim proxy.conf //加入如下内容
server
{
listen 80;
server_name ask.apelearn.com; 定义一个域名
location /
{
proxy_pass http://121.201.9.155/; 配置真实IP
proxy_set_header Host $host; 要访问的域名
proxy_set_header X-Real-IP $remote_addr; 指定ip的
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
- /use/local/nginx/sbin/nginx -t 检测语法错误
- /use/local/nginx/sbin/nginx -s reload 重新加载一下配置文件
- curl 测试一下,访问成功,通过本地地址访问到远程的网址
十一.扩展
nginx.conf 配置详解
https://coding.net/u/aminglinux/p/nginx/git/tree/master/3z
nginx rewrite四种flag
http://unixman.blog.51cto.com/10163040/1711943
https://coding.net/u/aminglinux/p/nginx/git/blob/master/rewrite/break.md
502问题汇总 http://ask.apelearn.com/question/9109
location优先级 https://coding.net/u/aminglinux/p/nginx/git/blob/master/location/priority.md