配置文件结构主要有以下几部分构成
…………
events
{
…………
}
http
{
server //虚拟主机的配置每个server就是一个独立的虚拟主机
{
…………
}
server
{
…………
}
server
{
…………
}
}
配置文件简单示例和说明
#使用的用户和组
user nginx;
#启动进程,通常设置成和cpu的数量相等
worker_processes 1;
#指定错误日志存放的路径,错误日志记录级别可选项为:[debug | info | notice | warn | eeror | crit]
error_log /var/log/nginx/error.log warn;
#指定PID文件的存放路径
pid /var/run/nginx.pid;
#工作模式及连接数上限
events {
#使用的网络I/O模型,Linux系统推荐采用epoll模型,FreeBSD系统推荐采用kqueue模型
use epoll;
worker_connections 1024; #单个后台worker process进程的最大并发链接数
}
#设定http服务器,利用它的反向代理功能提供负载均衡支持
http {
#设定mime类型(邮件支持类型),类型由mime.types文件定义
include /etc/nginx/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 /var/log/nginx/access.log main;
#sendfile 指令指定 nginx 是否调用 sendfile 函数(zero copy 方式)来输出文件,对于普通应用,
#必须设为 on,如果用来进行下载等应用磁盘IO重负载应用,可设置为 off,以平衡磁盘与网络I/O处理速度,降低系统的uptime.
sendfile on;
#tcp_nopush on;
#连接超时时间
keepalive_timeout 65;
#gzip压缩开关
#gzip on;
include /etc/nginx/conf.d/*.conf; //包含虚拟主机的配置文件即上面的http服务器部分
}
下面打开一个默认的default.conf看看
#HTTP服务器
server {
#监听80端口,80端口是知名端口号,用于HTTP协议
listen 80;
#主机名称
server_name localhost;
#编码格式
#charset koi8-r;
#访问日志文件存放位置
#access_log /var/log/nginx/host.access.log main;
location / {
#HTML网页文件存放的目录
root /usr/share/nginx/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 /usr/share/nginx/html;
}
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#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
#
#location ~ /\.ht {
# deny all;
#}
}
虽然示例的配置文件是由多个文件组成(新版本),但是本质上还是一样的;
添加IP别名,在同一块物理网卡上绑定多个IP,实现使用单一网卡的同一个服务器上运行多个基于IP的虚拟主机。
[root@~ /]# ifconfig
enp2s0: flags=4163 mtu 1500
inet 192.168.8.119 netmask 255.255.255.0 broadcast 192.168.8.255
inet6 240e:d8:522:201:dc72:9b23:96d0:6 prefixlen 128 scopeid 0x0
inet6 fddc:729b:2396:d000:932:7ebe:518e:2228 prefixlen 64 scopeid 0x0
inet6 fe80::8f20:ca10:d734:8d67 prefixlen 64 scopeid 0x20
inet6 240e:d8:522:201:fb83:4e4c:47d6:747f prefixlen 64 scopeid 0x0
ether xx:xx:xx:xx:xx:xx txqueuelen 1000 (Ethernet)
RX packets 1170 bytes 115377 (112.6 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 829 bytes 166942 (163.0 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73 mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10
loop txqueuelen 1000 (Local Loopback)
RX packets 68 bytes 5912 (5.7 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 68 bytes 5912 (5.7 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
我的网卡设备就是enp2s0, lo是本地环回;
使用指令为enp2s0添加ip别名
ifconfig enp2s0:0 192.168.8.250 netmask 255.255.255.0 up
ifconfig enp2s0:1 192.168.8.251 netmask 255.255.255.0 up
再使用ifconfig命令查看
[root@6~ /]# ifconfig
enp2s0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.8.119 netmask 255.255.255.0 broadcast 192.168.8.255
inet6 240e:d8:522:201:dc72:9b23:96d0:6 prefixlen 128 scopeid 0x0<global>
inet6 fddc:729b:2396:d000:932:7ebe:518e:2228 prefixlen 64 scopeid 0x0<global>
inet6 fe80::8f20:ca10:d734:8d67 prefixlen 64 scopeid 0x20<link>
inet6 240e:d8:522:201:fb83:4e4c:47d6:747f prefixlen 64 scopeid 0x0<global>
ether xx txqueuelen 1000 (Ethernet)
RX packets 1560 bytes 161079 (157.3 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 1128 bytes 217756 (212.6 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
enp2s0:0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.8.250 netmask 255.255.255.0 broadcast 192.168.8.255
ether xx txqueuelen 1000 (Ethernet)
enp2s0:1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.8.251 netmask 255.255.255.0 broadcast 192.168.8.255
ether xx txqueuelen 1000 (Ethernet)
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1000 (Local Loopback)
RX packets 68 bytes 5912 (5.7 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 68 bytes 5912 (5.7 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
添加完成后ping添加的IP 能够ping通则证明配置无误;但是此方式添加的ip别名在重启之后会消失,不过可以将此命令添加到 /etc/rc.local文件中,让系统开机后自动运行;
添加完IP之后就通过配置文件让虚拟主机监听这些ip
http
{
#第一个虚拟主机
server
{
#监听的IP和端口
listen 192.168.8.250:80 //也可以不写ip只写端口
#主机名称
server_name 192.168.8.250
……
}
#第二个虚拟主机
server
{
#监听的IP和端口
listen 192.168.8.251:80 //也可以不写ip只写端口
#主机名称
server_name 192.168.8.251
……
}
…………
}
基于域名的虚拟主机是最常见的一种虚拟主机,这种技术,使很多虚拟主机可以共享同一IP址,有效解决了IP地址不足的问题
http
{
server
{
#监听的端口
listen 80
#主机名称
server_name aaa.domain.com
……
}
server
{
#监听的端口
listen 80
#主机名称
server_name bbb.otherdomain.com
……
}
server
{
#监听的端口
listen 80
#主机名称
server_name www.domain.com domain.com *.domain.com
………
}
}
第一个虚拟主机表示所有对域名aaa.domain.com访问都有它来处理;
第二个虚拟主机表示所有对域名bbb.otherdomain.com访问都有它来处理;
第三个虚拟主机表示对域名www.domain.com 、domain.com以及除了aaa.domain.com之外的所有x.domain.com的二级域名的访问都由它来处理。