利用虚拟主机,不同为每个要运行的网站提供一台单独的Nginx服务器或单独运行一组Nginx进程。
虚拟主机提供了在同一台服务器、同一组Nginx进程上运行多个网站的功能。
Nginx配置文件如下:
nginx/conf/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;
sendfile on;
keepalive_timeout 65;
server_names_hash_bucket_size 128;
client_header_buffer_size 2k;
large_client_header_buffers 4 4k;
client_max_body_size 8m;
open_file_cache max=204800 inactive=20s;
open_file_cache_valid 30s;
open_file_cache_min_uses 1;
gzip on;
#gzip_static on;
gzip_min_length 1024;
gzip_proxied any;
gzip_types text/plain application/xml application/x-javascript text/javascript text/css text/html5;
upstream cc{
server 10.151.15.103:8080;
server 10.151.15.103:8090;
session_sticky;
}
server {
listen 80;
server_name 10.151.15.103;
proxy_buffer_size 128k;
proxy_buffers 32 128k;
proxy_busy_buffers_size 128k;
ssi on;
location / {
index index.html index.htm index.shtml index.zhtml login.zhtml;
proxy_pass http://cc;
proxy_redirect off;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
client_max_body_size 1000m;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
location /NginxStatus {
stub_status on;
access_log off;
}
}
}
基于IP的虚拟主机
可以在一块物理网卡上绑定多个IP地址,这样就能够在使用单一网卡的同一个服务器上运行多个基于IP的虚拟主机。
设置IP别名也很容易,只需配置系统上的网络接口,让它监听额外的IP地址。
[root@TA30-53 ~]# ifconfig
eth2 Link encap:Ethernet HWaddr 00:50:56:A3:02:9B
inet addr:10.143.128.165 Bcast:10.143.128.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:33950932 errors:0 dropped:0 overruns:0 frame:0
TX packets:28189012 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:14553137910 (13.5 GiB) TX bytes:5744060219 (5.3 GiB)
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:9144 errors:0 dropped:0 overruns:0 frame:0
TX packets:9144 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:13844061 (13.2 MiB) TX bytes:13844061 (13.2 MiB)
该服务器有一块物理网卡设备eth2和本地回环设备lo,eth2的ip地址为10.143.128.165,本地回环lo的ip地址为127.0.0.1
本地回环代表设备的本地虚拟接口,所以默认被看作永远不会宕掉的接口,它的作用:
1.测试本机的网络配置,能ping通127.0.0.1说明本机的网卡和ip协议安装都没有问题。
2.某些SERVER/CLIENT的应用程序在运行时须调用服务器上的资源,一般都要指定SERVER的ip地址,但当该程序要在同一台机器上运行且没有别的SERVER时,就可以把SERVER的资源装在本机上,SERVER的IP地址设为127.0.0.1也同样可以运行,
在eth2网卡设备上添加两个ip别名10.143.128.166和10.143.128.167
[root@TA30-53 ~]# /sbin/ifconfig eth2:1 10.143.128.166 broadcast 10.143.128.255 netmask 255.255.255.0 up
[root@TA30-53 ~]# /sbin/route add -host 10.143.128.166 dev eth2:1
[root@TA30-53 ~]# /sbin/ifconfig eth2:2 10.143.128.167 broadcast 10.143.128.255 netmask 255.255.255.0 up
[root@TA30-53 ~]# /sbin/route add -host 10.143.128.167 dev eth2:2
[root@TA30-53 ~]# ifconfig
eth2 Link encap:Ethernet HWaddr 00:50:56:A3:02:9B
inet addr:10.143.128.165 Bcast:10.143.128.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:33984239 errors:0 dropped:0 overruns:0 frame:0
TX packets:28224440 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:14556744285 (13.5 GiB) TX bytes:5754780260 (5.3 GiB)
eth2:1 Link encap:Ethernet HWaddr 00:50:56:A3:02:9B
inet addr:10.143.128.166 Bcast:10.143.128.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
eth2:2 Link encap:Ethernet HWaddr 00:50:56:A3:02:9B
inet addr:10.143.128.167 Bcast:10.143.128.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:9166 errors:0 dropped:0 overruns:0 frame:0
TX packets:9166 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:13857211 (13.2 MiB) TX bytes:13857211 (13.2 MiB)
这时,从另外一台服务器ping 10.143.128.166和10.143.128.167,如果可以ping通,则证明配置无误。
但是通过ifconfig和route配置的ip别名在服务器重启后会消失。
可以将这两条命令加到/etc/rc.local文件中,让系统开机时自动运行:
[root@TA30-53 ~]# vi /etc/rc.local
在文件末尾增加以下内容,然后保存即可。
无论是通过ip别名在一台服务器上配置多个ip地址,还是通过多块网卡在服务器上配置多个ip地址,在Nginx中都能将其配置为基于ip的虚拟主机。
http {
#第一个虚拟主机
server {
#监听的ip和端口
listen 10.143.128.165:80;
#主机名称
server_name 10.143.128.165;
#访问日志文件存放路径
access_log logs/server1.access.log combined;
location / {
#默认首页文件,顺序从左到右,如果找不到index.html,则查找index.htm文件作为首页文件
index index.html index.htm;
#HTML网页文件存放的目录
root html;
}
}
#第二个虚拟主机
server {
#监听的ip和端口
listen 10.143.128.166:80;
#主机名称
server_name 10.143.128.166;
#访问日志文件存放路径
access_log logs/server2.access.log combined;
location / {
#默认首页文件,顺序从左到右,如果找不到index.html,则查找index.htm文件作为首页文件
index index.html index.htm;
#HTML网页文件存放的目录
root html;
}
}
#第三个虚拟主机
server {
#监听的ip和端口
listen 10.143.128.167:80;
#主机名称
server_name 10.143.128.167;
#访问日志文件存放路径
access_log logs/server3.access.log combined;
location / {
#默认首页文件,顺序从左到右,如果找不到index.html,则查找index.htm文件作为首页文件
index index.html index.htm;
#HTML网页文件存放的目录
root html;
}
}
server {
listen 192.168.204.131:80;
server_name example.org www.example.lianggzone.com;
root /data/www;
}
server {
listen 192.168.204.132:80;
server_name example.net www.example.lianggzone.com;
root /data/bbs;
}
基于域名的虚拟主机
127.0.0.1 www.blog.lianggzone.com www.bbs.lianggzone.com
server {
listen 80;
server_name www.blog.lianggzone.com;
location / {
root /usr/local/dev/nginx/page;
index index.html;
}
}
server {
listen 80;
server_name www.bbs.lianggzone.com;
location / {
root /usr/local/dev/nginx/page;
index index2.html;
}
}
基于端口 的虚拟主机
使用端口来区分,浏览器使用域名或ip地址:端口号访问
server {
listen 8080;
server_name www.blog.lianggzone.com;
root /usr/local/dev/nginx/page;
}
server {
listen 9090;
server_name www.bbs.lianggzone.com;
root /usr/local/dev/nginx/page;
}