忙里偷闲,研究了一下Nginx的配置文件用法。Nginx的安装和在流媒体代理上的应用,前面已经写过,这里略过,有兴趣的朋友可以参考之前的文章:
在Ubuntu上安装Nginx with nginx-http-flv-module
Nginx + Nginx-http-flv-module + FFMPEG实现直播和点播
Nginx默认的配置文件为/usr/local/nginx/conf/nginx.conf,配置文件主要包括全局、event、http、server设置,其中,event用来定义Nginx工作模式,http提供web功能,server用来设置虚拟主机。server必须位于http块内部,一个配置文件中可以包含多个server。
Nginx配置文件的详细解析如下:
#设置用户与组
#user nobody
#启动子进程数,建议数值为与CPU核心数相同
worker_processes 1
#错误日志文件,以及日志级别,[ debug | info | notice | warn | error | crit ]
error_log logs/error.log info
#进程pid文件
pid logs/nginx.pid
events {
#每个进程可以处理的连接数,受系统文件句柄的限制
worker_connections 1024;
}
http {
#mime.types为文件类型定义文件
include mime.types;
#默认文件类型
default_type application/octet-stream;
#使用log_format可以自定义日志格式,名称为main
#log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"';
#创建访问日志,格式采用main定义的格式
#access_log logs/access.log main;
#是否调用sendfile()进行数据复制,sendfile()复制数据是在内核级别完成的,
#比一般的read、wirte更高效。
sendfile on;
#开启该选项后,服务器的响应头部信息将产生独立的数据包发送,即一个响应头信息一个包
#tcp_nopush on;
#保持连接的超时时间
keepalive_timeout 65;
#是否采用压缩功能,将页面压缩后传输更节省流量
#gzip on;
#使用server定义虚拟主机
server {
#服务器监听的端口
listen 80;
#访问域名
server_name www.delia.com;
#编码格式,如果网页编码与此设置不同,则将被自动转码
#charset koi8-r;
#设置虚拟主机的访问日志
#access_log logs/host.access.log main;
#对URL进行匹配
location / {
#设置网页根路径,使用的是相对路径,html指的是出于Nginx安装目录下的子目录
root html;
#首页文件,先查找index.html,如果没有,再找index.htm
index index.html index.htm;
}
#设置错误代码对应的错误页面
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#该块的意思是,若用户访问URL以.php结尾,则自动将该请求转交给127.0.0.1服务器,
#通过proxy_pass可以实现代理功能
#location ~ \.php$ {
# proxy_pass http://127.0.0.1;
#}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
#location ~ \.php$ {
# root html;
# fastcgi_pass 127.0.0.1:9000;
# fastcgi_index index.php;
# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
# include fastcgi_params;
#}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#拒绝所有人访问.ht页面
#location ~ /\.ht {
# deny all;
#}
}
# another virtual host using mix of IP-, name-, and port-based configuration
# 定义另一个虚拟主机
#server {
# listen 8000;
# listen somename:8080;
# server_name somename alias another.alias;
# location / {
# root html;
# index index.html index.htm;
# }
#}
# HTTPS server
#
#server {
# listen 443 ssl;
# server_name localhost;
#指定证书文件,使用相对路径,证书需要存放在与nginx.conf同目录下
# ssl_certificate cert.pem;
#私钥文件,使用相对路径,私钥存放在与nginx.conf同一目录下
# ssl_certificate_key cert.key;
# ssl_session_cache shared:SSL:1m;
# ssl_session_timeout 5m;
# ssl_ciphers HIGH:!aNULL:!MD5;
# ssl_prefer_server_ciphers on;
# location / {
# root html;
# index index.html index.htm;
# }
#}
}
接下来,我们就测试一下Nginx的虚拟主机代理。设置4个网页,不同的地址请求分别返回不同的网页给客户端。由于没有安装DNS,所以这里只能以IP和端口来表示。
新建一个用于测试的conf文件,命名为test_nginx.conf,内容如下:
#user nobody;
worker_processes 1;
#error_log logs/error.log;
#error_log logs/error.log notice;
error_log logs/error.log info;
pid logs/nginx.pid;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
#access_log logs/access.log main;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
gzip on;
server {
listen 80;
server_name localhost;
# server_name www.domain.com *.domain.com;
#access_log logs/access.log main;
location / {
root html/first;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
location ~ /\.ht {
deny all;
}
}
server {
listen 8080;
server_name localhost;
location / {
root html/second;
index index.html index.htm;
}
}
server {
listen 8081;
server_name localhost;
location / {
root html/third;
index index.html index.htm;
}
}
server {
listen 8082 default_server;
location / {
root html/default;
index index.html index.htm;
}
}
}
以上conf文件中,实现了4个server,每个server通过相同不同端口来区分,每个server返回的html文件不同,4个server的html文件分别放在/usr/local/nginx/html/目录下的first、second、third和default子目录下。现在,我们先来创建这四个目录:
sudo mkdir /usr/local/nginx/html/{first,second,third,default}
创建成功后,为每个目录添加可读写权限:
sudo chmod 777 {first,second,third,default}
然后,向4个目录中添加index.html及内容,简单起见,分别添加如下内容:
echo "Welcom to the first html!" > /usr/local/nginx/html/first/index.html
echo "Welcom to the second html!" > /usr/local/nginx/html/second/index.html
echo "Welcom to the third html!" > /usr/local/nginx/html/third/index.html
echo "Welcom to the default html!" > /usr/local/nginx/html/default/index.html
执行完成后,确认相应目录下的文件被成功创建,接下来,我们就在自己的PC机上访问以上几个server,结果如下: