Chinaunix首页 | 论坛 | 博客
  • 博客访问: 139744
  • 博文数量: 43
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 501
  • 用 户 组: 普通用户
  • 注册时间: 2014-10-24 15:28
文章分类

全部博文(43)

文章存档

2015年(18)

2014年(25)

我的朋友

分类: LINUX

2014-11-26 09:14:56

 Linux、FreeBSD操作系统都允许添加IP别名。IP别名即:可以在一块物理网卡上绑定多个IP地址。这样就能够在使用单一网卡的同一个服务器上运行多个基于IP的虚拟主机。设置IP别名也非常容易,只须配置系统上的网络接口,让它监听额外的lP地址。在Linux系统上,可以使用标准的网络配置工具(比如ifconfig和route命令)添加IP别名。


1)、先用ifconfig命令查看该服务器的lP地址。

[root@linux nginx]# ifconfig
eth0      Link encap:Ethernet  HWaddr 00:0C:29:0F:AD:2C  
          inet addr:192.168.5.133  Bcast:192.168.5.255  Mask:255.255.255.0
          inet6 addr: fe80::20c:29ff:fe0f:ad2c/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:27620 errors:0 dropped:0 overruns:0 frame:0
          TX packets:12386 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:8070054 (7.6 MiB)  TX bytes:1302117 (1.2 MiB)


lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:1593 errors:0 dropped:0 overruns:0 frame:0
          TX packets:1593 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:80254 (78.3 KiB)  TX bytes:80254 (78.3 KiB)


2)、在eth0网卡设备上添加两个lP别名192.168.5.201和192.168.5.202,通过ifconfig和route命令来进行:

[root@linux nginx]# ifconfig eth0:192.168.5.201 broadcast 192.168.5.255 netmask 255.255.255.0 up

[root@linux nginx]# route add -host 192.168.5.201 dev eth0:1    

[root@linux nginx]# ifconfig eth0:192.168.5.202 broadcast 192.168.5.255 netmask 255.255.255.0 up

[root@linux nginx]# route add -host 192.168.5.202 dev eth0:2  



3)、再执行ifconfig命令,就可以看到eth0网卡设备上绑定了两个lP别名

eth0      Link encap:Ethernet  HWaddr 00:0C:29:0F:AD:2C  
          inet addr:192.168.5.133  Bcast:192.168.5.255  Mask:255.255.255.0
          inet6 addr: fe80::20c:29ff:fe0f:ad2c/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:27620 errors:0 dropped:0 overruns:0 frame:0
          TX packets:12386 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:8070054 (7.6 MiB)  TX bytes:1302117 (1.2 MiB)

eth0:1    Link encap:Ethernet  HWaddr 00:0C:29:0F:AD:2C  
          inet addr:192.168.5.201  Bcast:192.168.5.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

eth0:2    Link encap:Ethernet  HWaddr 00:0C:29:0F:AD:2C  
          inet addr:192.168.5.202  Bcast:192.168.5.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
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:1593 errors:0 dropped:0 overruns:0 frame:0
          TX packets:1593 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:80254 (78.3 KiB)  TX bytes:80254 (78.3 KiB)


4)、 从另外一台服务器Ping 192.168.5.201和192.168.5.202两个IP,如果能够Ping通,则证明配置无误。但是,通过ifconfig和route配置的IP别名在服 务器重启后会消失,不过可以将这两条ifconng和route命令添加到/etc/rc.local文件中,让系统开机时自动运行,以下是相关命令:
vi /etc/rc.local
在文件末尾增加以下内容,然后保存即可:

ifconfig eth0:192.168.5.201 broadcast 192.168.5.255 netmask 255.255.255.0 up
route add -host 192.168.5.201 dev eth0:1    
ifconfig eth0:192.168.5.202 broadcast 192.168.5.255 netmask 255.255.255.0 up
route add -host 192.168.5.202 dev eth0:2


5)、下面开始配置基于IP的虚拟主机,在Nginx配置文件(nginx.conf)中,分别对192.168.5.133、192.168.5.201、192.168.5.202三个IP配置三个纯静态HTML支持的虚拟主机。

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  65;

    #gzip  on;
    #第一个虚拟主机
    server {
        listen       192.168.5.133:80;               #监听的IP和端口
        server_name  192.168.5.133;              #主机名称

        access_log  logs/host1.access.log  main;                #访问日志文件存放路径

        location /
        {
            root /usr/local/nginx/html/host1;              #HTML网页文件存放的目录
            index  index.html index.htm;                    #默认首页文件,顺序从左到右,如果找不到index.html文件,则查找index.htm文件作为首页文件
        }
}
    #第二个虚拟主机
    server {
        listen       192.168.5.201:80;
        server_name  192.168.5.201;

        access_log  logs/host2.access.log  main;

        location /
        {
            root /usr/local/nginx/html/host2;
            index  index.html index.htm;
        }
}
    #第三个虚拟主机
    server {
        listen       192.168.5.202:80;
        server_name  192.168.5.202;

        access_log  logs/host3.access.log  main;

        location /
        {
            root /usr/local/nginx/html/host3;
            index  index.html index.htm;
        }
}

从上面的配置文件中可以看出,一段server{……}就是一个虚拟主机,如果要配置多个虚拟主机,建立多段server{……}配置即可,非常方便。监听的IP和端口也可以不写IP地址,只写端口,把它配置成"listen 80",则表示监听该服务器上所有IP的80端口,可通过server_name区分不同 的虚拟主机。






四、Nginx服务的运行控制
1.添加nginx运行的用户组:[root@localhost nginx-1.0.15]# useradd -s /sbin/nologin nginx

2.Nginx默认安装在/usr/local/nginx目录下,为了方便应用,可以添加一个nginx主程序的符号链接:
[root@localhost nginx-1.0.15]# ln -sf /usr/local/nginx/sbin/nginx  /usr/sbin

3.使用nginx -t命令检查nginx配置文件是否有语法错误:[root@linux nginx-1.0.15]# nginx -t

nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful

[root@linux nginx-1.0.15]#
执行nginx -t后出现上述提示表示配置文件语法正确。
 
4.使用nginx启动服务,然后使用netstat命令进行查看:
[root@linux nginx-1.0.15]# netstat -anpt|grep 80
tcp        0      0 0.0.0.0:80                  0.0.0.0:*                   LISTEN      16787/nginx         
[root@linux nginx-1.0.15]#


6.使用系统信号控制nginx进程:
启动:nginx
重启:kill -HUP `cat /usr/local/nginx/logs/nginx.pid`
[root@localhost~]# kill -s HUP nginx   //重新加载配置文件,等同于“killall -1 nginx”
[root@localhost~]# kill -s QUIT nginx  //安全退出,等同于“kill -3 nginx”
[root@localhost~]# kill -s TERM nginx //快速退出,不等待处理完当前连接


另外,为了方便管理,可以添加一个nginx服务脚本,使用chkconfig和service命令管理nginx服务:
[root@localhost~]# vi /etc/init.d/nginx

#!/bin/bash
#chkconfig: 2345 80 90
#description: Nginx Service Control Script
case "$1" in
  start)
         /usr/sbin/nginx    
         ;;
  stop)
         /usr/bin/killall -s QUIT nginx
            ;;
  restart)
         $0 stop
         $0 start
         ;;
  reload)
         /usr/bin/killall -s HUP nginx
         ;;
  *)
    echo "Usage:$0 {start|stop|restart|reload}"
    exit 1
esac
exit 0

[root@localhost~]# chmod a+x /etc/init.d/nginx    为nginx脚本赋予可执行权限

[root@localhost~]# chkconfig --add nginx[root@localhost~]# chkconfig --level 2345 nginx on

接下来就可以使用service nginx stop|start|restart|reload对nginx服务进行控制:


[root@linux nginx-1.0.15]# service nginx restart

[root@linux nginx-1.0.15]# !nets
netstat -anpt|grep 80
tcp        0      0 0.0.0.0:80                  0.0.0.0:*                   LISTEN      16787/nginx    


五,测试

1)、用脚本重启nginx。

[root@linux conf]# service nginx restart

2)、在/usr/local/nginx/html/下分别建立三个目录host1,host2,host3。分别在三个目录中放一个index.html 文件,分别写上自己的IP地址;

例如:在host1下的index.html中:(host2或者host3下的index.html类似,只是把页面内容中的ip地址改一下)




Welcome to nginx!



Welcome to nginx!


this is host1


192.168.5.133





3)、用浏览器访问相应IP地址。
 

在客户端浏览器中执行:(服务器IP地址)进行查看,如果看到页面中出现刚刚写的IP地址,说明配置成功,另外两个页面类似。


阅读(1011) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~