默认虚拟主机一般是配置文件中的第一个虚拟主机。也可以通过在虚拟主机配置文件中设置default_server,指定为默认虚拟主机。
默认配置文件中只有一个虚拟主机,所以默认的虚拟主机就是该虚拟主机。
user nobody nobody;
worker_processes 2;
error_log /usr/local/nginx/logs/nginx_error.log crit;
pid /usr/local/nginx/logs/nginx.pid;
worker_rlimit_nofile 51200;
events
{
use epoll;
worker_connections 6000;
}
http
{
include mime.types;
default_type application/octet-stream;
server_names_hash_bucket_size 3526;
server_names_hash_max_size 4096;
log_format combined_realip '$remote_addr $http_x_forwarded_for [$time_local]'
' $host "$request_uri" $status'
' "$http_referer" "$http_user_agent"';
sendfile on;
tcp_nopush on;
keepalive_timeout 30;
client_header_timeout 3m;
client_body_timeout 3m;
send_timeout 3m;
connection_pool_size 256;
client_header_buffer_size 1k;
large_client_header_buffers 8 4k;
request_pool_size 4k;
output_buffers 4 32k;
postpone_output 1460;
client_max_body_size 10m;
client_body_buffer_size 256k;
client_body_temp_path /usr/local/nginx/client_body_temp;
proxy_temp_path /usr/local/nginx/proxy_temp;
fastcgi_temp_path /usr/local/nginx/fastcgi_temp;
fastcgi_intercept_errors on;
tcp_nodelay on;
gzip on;
gzip_min_length 1k;
gzip_buffers 4 8k;
gzip_comp_level 5;
gzip_http_version 1.1;
gzip_types text/plain application/x-javascript text/css text/htm
application/xml;
include vhost/*.conf; 定义虚拟主机配置文件位置
}
server
{
listen 80 default_server; 有default_server标记的就是默认虚拟主机
server_name aaa.com; 可以定义多个域名
index index.html index.htm index.php;
root /data/wwwroot/default;
}
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; 定义用户名密码文件
}
}
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;
}
}
字段 |
说明 |
$remote_addr |
记录客户端IP(公网) |
$http_x_forwarded_for |
代理费服务器的IP |
$time_local |
服务器本地时间 |
$host |
访问的主机名(域名) |
$request_uri |
访问的uri地址 |
$status |
状态码 |
$http_referer |
refer |
$http_user_agent |
用户代理 |
nginx产生的访问日志文件一直就是一个,不会自动进行切割,如果访问量很大的话,将会导致日志文件容易非常大,不便于管理。可以使用shell脚本结合crontab命令非常方便的进行切割。
#! /bin/bash
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`
do
mv $log $log-$d 以前一天的年月日命名,日志文件
done
/bin/kill -HUP `cat $nginx_pid` 与-s reload类似,重新加载配置文件
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ 定义匹配的格式
{
expires 7d; 过期时间为7天
access_log off;
}
location ~ .*\.(js|css)$
{
expires 12h; 过期时间即1天
access_log off;
}
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; 返回状态码为403
}
access_log off;
}
nginx可以针对目录的访问进行控制
location /admin/
{
allow 192.168.157.128; 只要这个IP在前面匹配规则生效后,不会再去匹配后面的规则
allow 127.0.0.1;
deny all;
}
location ~ .*(abc|image)/.*\.php$ 匹配包含有abc或image结尾为php的文件
{
deny all; 全部拒绝
}
if ($http_user_agent ~ 'Spider/3.0|YoudaoBot|Tomato') 使用*可以不区分大小写。
{
return 403;
}
其中deny all和return 403效果一样
新配置的虚拟主机还没有办法进行虚拟主机的解析。需要对配置文件进行修改。
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;
}
server
{
listen 80;
server_name www.baidu.com; 需要代理的网站
location /
{
proxy_pass http://115.239.211.112/; 代理网站的IP
proxy_set_header Host $host; 即server_name
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
同步、异步发生在当客户端发起请求后,服务端处理客户端的请求时。
同步机制,是指客户端发送请求后,需要等待服务端(内核)返回信息后,再继续发送下一个请求。
在同步机制中,所有的请求在服务器端得到同步,即发送方和接收方对请求的处理步调是一致的。
异步机制,是指客户端发出一个请求后,不等待服务端(内核)返回信息,就继续发送下一个请求。
在异步机制中,所有来自发送方的请求形成一个队列,接收方处理完后再通知发送方。
举例:一家酒店前台,在旺季的高峰时间段会接很多预定酒席的电话。
阻塞与非阻塞发生在IO调度中,比如内核到磁盘IO。
阻塞方式下,进程/线程在获取最终结果之前,被系统挂起了,也就是所谓的阻塞了,在阻塞过程中该进程什么都干不了,
直到最终结果反馈给它时,它才恢复运行状态。
非阻塞方式和阻塞相反,进程/线程在获取最终结果之前,并没有进入被挂起的状态,而是该进程可以继续执行新的任务。
当有最终结果反馈给该进程时,它再把结果交给客户端。
此时角色不再是前台,而是她的查询有无剩余酒席的同事。
Nginx之所以可以支持高并发,是因为Nginx用的是异步非阻塞的机制,而Nginx是靠事件驱动模型来实现这种机制的。
在Nginx的事件驱动模型下,客户端发起的所有请求在服务端都会被标记为一个事件,Nginx会把这些事件收集到“事件收集器”里,然后再把这些事件交给内核去处理。
http://unixman.blog.51cto.com/10163040/1711943
https://coding.net/u/aminglinux/p/nginx/git/blob/master/rewrite/break.md