任务列表:
12.7 默认虚拟主机
12.8 Nginx用户认证
12.9 Nginx域名重定向
12.10 Nginx访问日志
12.11 Nginx日志切割
12.12 静态文件不记录日志和过期时间
12.13 Nginx防盗链
12.14 Nginx访问控制
12.15 Nginx解析php相关配置
12.16 Nginx代理
12.7 默认虚拟主机
1,更改主配置文件,添加虚拟主机配置文件路径
vim /usr/local/nginx/conf/nginx.conf
- 删除server下的内容
- 在http的最后添加
include vhost/*.conf;
- 这里的vhost目录是指在
/usr/local/nginx/conf
目录下的vhost目录。
2,在指定的目录里生成主机配置文件
- vim /usr/local/nginx/conf/vhost/aaa.com.conf
- 添加以下内容
server
{
listen 80 default_server;
server_name aaa.com;
index index.html index.htm index.php;
root /data/wwwroot/default;
}
- listen 指监听端口
- default_server// 有这个标记的就是默认虚拟主机
- server_name 指虚拟主机名称。
- index 指默认页面
- root 网页内容存放路径。默认页面就放在这个目录的根下。
3,生成网站目录
mkdir -p /data/wwwroot/default/
- 目录名称自定,但要和配置文件一致。
4,制作测试默认页面
echo “This is a default site.”>/data/wwwroot/default/index.html
- 内容自订,注意现在没有php配置,所以只能制作html页面。
5,重新载入配置
/usr/local/nginx/sbin/nginx -t
/usr/local/nginx/sbin/nginx -s reload
- 测试过程是必须的,防止意外出现。
- 使用-s reload而不使用restart是为了只重载配置,而不影响在线的用户。
6,测试
- web测试输入虚拟主机名称,输出This is a default site.即为成功。
curl -x 127.0.0.1:80 aaa.com
输出This is a default site.即为成功
默认虚拟主机
- 带有default_server标记的为默认
- 没有default_server,在/vhost目录下排第一的为默认。
- 多个default_server标记,排前的为默认。
12.8 Nginx用户认证
1,核心配置
location /
{
auth_basic "Auth";
auth_basic_user_file /usr/local/nginx/conf/htpasswd;
}
2,生成认证文件。
- 生成认证文件需要/usr/local/apache2.4/bin/htpasswd工具。
- 如果没有安装apache。可以使用
yum install -y httpd
装一个。 - 生成认证文件
/usr/local/apache2.4/bin/htpasswd -c /usr/local/nginx/conf/htpasswd username
New password:
Re-type new password:
Adding password for user username
- 输入两次密码确认后生成指定的文件
- 第一次成生文件需要-c第二次开始就不需要了。如果还加-c,就会重置这个文件。
3,测试配置并重新加载
/usr/local/nginx/sbin/nginx -t
/usr/local/nginx/sbin/nginx -s reload
4,测试
- web测试,打开网页时提示输入帐号密码即为成功。
curl -x 127.0.0.1:80 aaa.com -I
,返回401,说明需要用户认证。curl -x 127.0.0.1:80 -uxy:47721852 aaa.com -I
,输入用户名密码返回200,说明正常。
5,认证方式也可以针对网页根下的目录:
- 比如针对/data/wwwroot/sapwin.com/admin目录
location /admin/
{
auth_basic "Auth";
auth_basic_user_file /usr/local/nginx/conf/htpasswd;
}
- 使用curl测试时,针对目录结尾一定要带上/以表示这是一个目录。
6,匹配文件url
location ~ admin.php
{
auth_basic "Auth";
auth_basic_user_file /usr/local/nginx/conf/htpasswd;
}
- 使用~匹配url
12.9 Nginx域名重定向
1,核心配置
if ($host != 'aaa.com' ) {
rewrite ^/(.*)$ http://aaa.com/$1 permanent;
}
- if ( h o s t ! = ′ t e s t . c o m ′ ) 表 示 如 果 host != 'test.com' )表示如果 host!=′test.com′)表示如果host也就是除了aaa.com的所有域名。这是条件
- rewrite ^/(.*)$ http://aaa.com/$1 permanent;全部把自已的域名开头全改写成http://aaa.com/
^/(.*)$
的完整表达示为:http://hostname/(.*)$
- 一个网站可以有很多域名。跳转的主要目的就是提高自己的权重方便搜索引擎收录。
- permanent为永久跳转301,如果想让返回码为302,这里可以写成redirect
2,测试配置并重新加载
/usr/local/nginx/sbin/nginx -t
/usr/local/nginx/sbin/nginx -s reload
3,测试
curl -x 127.0.0.1:80 aaa.com -I
,返回301,说明成功。
12.10 Nginx访问日志
1,日志格式
vi /usr/local/nginx/conf/nginx.conf
- log_format这一行定义了日志的格式
- combined_realip 是日志的名称可以自定义
字段 | 含义 |
---|---|
$remote_addr | 客户端IP(公网IP) |
$http_x_forwarded_for | 代理服务器的IP |
$time_local | 服务器本地时间 |
$host | 访问主机名(域名) |
$request_uri | 访问的url地址 |
$status | 状态码 |
$http_referer | referer |
$http_user_agent | user_agent |
2,定义日志存放的路径
- access_log 可以定义访问日志的存放路径,并且可以直接通过nginx.conf中日志名称来调用日志的格式。
12.11 Nginx日志切割
1,自定义日志切割脚本
vim /usr/local/nginx/sbin/nginx_logrotate.sh
2,编辑脚本内容
#! /bin/bash
## 假设nginx的日志存放路径为/data/logs/
d=`date -d "-1 day" +%Y%m%d`
logdir="/data/logs"
nginx_pid="/usr/local/nginx/logs/nginx.pid"
cd $logdir
for log in `ls *.log`
do
mv $log $log-$d
done
/bin/kill -HUP `cat $nginx_pid`
find /data/logs -name *log-* type -f -mtine +7 |xargx mv
- data -d “-1 day” +%Y%m%d表示昨天,输出格试为年月日。
- 因为日志切割是要在今天的十二点,把昨天的日志归档。所以切割文件的名称是以昨天的日期来命名的。
- 定义
nginx_pid
函数的作用是在后边使用/bin/kill -HUP `cat $nginx_pid`来重新开始记录日志。 - 切割的实现:在今天的零点零分,把当前日志改名为log-昨天的日期,然后让日志重新开始记录。
- for log in `ls *.log`的意思是把以.log结尾的文件赋值给变量log
- 循环的结果就是所有以.log结尾的文件都带上昨天的日期。
- /bin/kill -HUP `cat $nginx_pid`执行后会生成新的log文件。
- 最后一行是删除七天以上的带有log-的文件。
3,通过任务计划执行脚本
crontab -e
0 0 * * * /bin/bash /usr/local/nginx/sbin/nginx_logrotate.sh
12.12日志文件不记录静态文件以及静态文件的过期时间
- 核心配置
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
{
expires 7d;
access_log off;
}
location ~ .*\.(js|css)$
{
expires 12h;
access_log off;
}
- expires 就是指过期时间。
- access_log off就是指不记录访问日志
- location ~ 后边匹配使用的是正则表达式。
12.13 Nginx防盗链
- 核心配置
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) {
return 403;
}
access_log off;
}
- location ~* 表示匹配时不区分大小写
valid_referers none blocked server_name
是用来定义白名单的if ($invalid_referer)
表示除了白名单以外的内容
12.14 Nginx访问控制
1,对目录限制
location /admin/
{
allow 192.168.133.1;
allow 127.0.0.1;
deny all;
}
- nginx在对ip限制这里是从上至下的。匹配到相符合的就不继续向下了。
2,对文件进行限制
location ~ .*(abc|image)/.*\.php$
{
deny all;
}
- 这里对目录和文件做了复合限制。网站下任何以abc和image结尾的目录的其下以.php结尾的文件都禁止防问。
3,限制user_agent
if ($http_user_agent ~ 'Spider/3.0|YoudaoBot|Tomato')
{
return 403;
}
- deny all和return 403效果一样
- 禁了Spider就会让蜘蛛不能爬到自己的网站上。
12.15 Nginx解析php相关配置
核心配置
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监听端口或文件。如果这里错了,就会出现502
- 出现502状态码的另一种可能,php.ini里定义的sock文件权限不够。
- fastcgi_param SCRIPT_FILENAME一定要指定网页根目录,否则404
12.16 Nginx代理
1,代理服务使用场景
- 不能直接访问服务器,服务器在一个私网内,但是可以通过代理服务器来访问。
- 直接访问速度太慢,可以通过代理服务器加速。
2,核心配置
- 生成一个代理虚拟服务器配置
vim /usr/local/nginx/conf/vhost/proxy.conf
server
{
listen 80;
server_name ask.apelearn.com;
location /
{
proxy_pass http://121.201.9.155/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
直播笔记
web代理软件排行
https://w3techs.com/technologies/overview/web_server/all