`
足至迹留
  • 浏览: 486127 次
  • 性别: Icon_minigender_1
  • 来自: OnePiece
社区版块
存档分类
最新评论

<2-1> Nginx基本配置--虚拟主机配置

阅读更多
下面是nginx的整体基本配置,后面会逐步介绍各子模块的配置。

2.1 Nginx的完整配置示例
Nginx的配置文件默认在 Nginx 程序安装目录的 conf 二级目录下,主配置文件为nginx.conf。
假设您的Nginx安装在/usr/local/webserver/nginx/目录下,那么默认的主配置文件则为 /usr/local/webserver/nginx/nginx.conf ,下面是 Nginx作为 Web Server 的完整配置示例。

#使用的用户和组
user  www  www;

#指定工作衍生进程数(一般等于CPU的总核数或总核数的两倍,例如两个四核CPU. 则总核数为 8)
worker_processes 8;

#指定错误日志存放的格径,错误日志记录级别可选项为: [ debug|info|notice|warn|error|crit ]
error_log  /datal/logs/nginx_error.log  crit;

#指定 pid 存放的路径,不指定则取安装时的默认pid文件
pid  /usr/local/webserver/nginx/nginx.pid;

#指定文件描述符数量
worker_rlimit_nofile 51200; 

events
{
    #使用的网络IO模型. Linux系统椎荐采用epoll模型. FreeBSD系统推荐采用kqueue模型
    use epoll;

    #允许的连接数
    worker_connections  51200;
}

http
{
    include          mime.types;
    default_type    application/octet-stream;

    #设置使用的字符集,如果一个网站有多种字符集,请不要随便设置,应让程序员在HTML 代码中通过 Meta标签设置
    #charset   gb2312;
    server_names_hash_bucket_size 128; 
    client_header_buffer_size   32k; 
    large_client_header_buffers     4    32k;

    #设置客户端能够上传的文件大小
    client_max_body_size   8m;

    sendfile on;
    tcp_nopush       on;

    keepalive_t imeout  60;
    tcp_nodelay  on;
    fastcgi_connect_timeout   300;
    fastcgi_send_timeout   300;
    fastcgi_read_timeout   300; 
    fastcgi_buffer_size      64k; 
    fastcgi_buffers   4    64k; 
    fastcgi_busy_buffers_size   128k;
    fastcgi_temp_file_write_size    128k;

    #开启 gzip 压缩
    gzip  on;
    gzip_min_length    1k;
    gzip_buffers         4  16k;
    gzip_http_version 1.1;
    gzip_comp_level  2;

    gzip_types  text/plain application/x-javascript text/css application/xml;
    gzip_vary  on;

    #limi t_zone  crawler   $binary_remote_addr   10m; 

    server
    {
        listen          80;
        server_name  www.yourdomain.com yourdomain.com;
        index  index.html  index.htm  index.php;
        root   /data0/htdocs;

        #limit_conn    crawler   20;

        location ~  .*\.(gif|jpg|jpeg|png|bmp|swf)$
        {
            expires 30d;
         }

        location  ~  .*\.(js|css)?$
        {
             expires lh;
        }
 
        #自定义log格式
        log_format access  '$remote_addr - $remote_user [$time_local]  "$request"   '$status $body_bytes_sent  "$http_referer"' ‘''$http_user_agent'' $http_x_forwarded_for';
        access_log  /data1/logs/access.log  access;
    }
}


通过上面的nginx.conf配置文件示例,可以看出nginx.conf的结构主要由以下几个部分构成:

events
{
    …
}

http
{
    …
    server
    {
        …
    }

    server
    {
        …
    }
}

2.2 Nginx的虚拟主机配置
2.2.1 什么是虚拟主机
虚拟主机使用的是特殊的软硬件技术,它把一台运行在因特网上的服务器主机分成一台台“虚拟”的主机,每台虚拟主机都可以是一个独立的网站,可以具有独立的域名,具有完整的Internet服务器功能(www、ftp、email等),同一台主机上的虚拟主机之间是完全独立的,从网站访问者来看,每一台虚拟主机和一台独立的主机完全相同。

利用虚拟主机,不用为每个要运行的网站提供 一台单独的 Nginx 服务器或单独运行一组
Nginx进程。虚拟主机提供了在同一台服务器、同一组 Nginx进程上运行多个网站的功能。

在 Nginx 配置文件( nginx.conf)中,一个最简化的虚拟主机配置如下所示。

http
{
    server
    {
        listen 80 default;
        server_name _*;
        access_log logs/default.access.log combined;
        location / {
            index index.html;
            root /data0/htdocs/htdocs;
        }
    }
}

跟Apache一样,Nginx也可以配置多种类型的虚拟主机:
一是基于IP的虚拟主机,
二是基于域名的虚拟主机,
三是基于端口的虚拟主机。


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

1)先用 ifconfig 命令查看该服务器的 IP 地址。下面这台服务器有一块物理网卡设备 eth0 和本地回环设备 lo,eth0 的 IP 地址为 192.168.8.42,本地回环lo的 IP 地址为 127.0.0.1。
本地回环代表设备的本地虚拟接口,所以默认被看作是永远不会宕掉的接口。它的主要作
用有两个:一是测试本机的网络配置,能 PING 通 127.0.0.1 说明本机的网卡和 IP 协议安装都没有问题:另一个作用是某些  SERVER/CLIENT   的应用程序在运行时须调用服务器上的资源, 一般要指定 SERVER  的 IP 地址,但当该程序要在同一台机器上运行且没有别的  SERVER  时, 就可以把 SERVER  的资源装在本机上, SERVER  的 IP 地址设为 127.0.0.1 也同样可以运行。

2)在 eth0 网卡设备上添加两个 IP 别名 192.168.8.43  和 192.168.8.44 ,可以通过下面的 ifconfig  和 route  命令来进行:

/sbin/ifconfig eth0:1 192.168. 8.43  broadcast 192.168.8.255 netmask  255.255.255.0 up
/sbib/route  add -host  192.168.8.43  dev  eth0:1                                                 

/sbin/ifconfig eth0:2 192.168. 8.44  broadcast 192.168.8.255 netmask  255.255.255.0 up
/sbib/route  add -host  192.168.8.44  dev  eth0:2


这时,再执行 ifconfig 命令,就可以看到 eth0网卡设备上绑定了两个IP 别名。

参考:Linux网络指令:
ifconfig: http://www.cnblogs.com/peida/archive/2013/02/27/2934525.html
route: http://blog.sina.com.cn/s/blog_67146a750100zoyi.html
http://www.cnblogs.com/peida/archive/2013/03/05/2943698.html

添加ip别名: http://blog.csdn.net/ldwtill/article/details/8525835

3)这时候,从另外一台服务器 ping 192.168.8.43 和 192.168.8.44 两个 IP,如果能够P ping通,则证明配置无误。但是,通过 ifconfig 和 route 配置的 IP 别名在服务器重启后会消失, 不过可以将这两条 ifconfig 和 route 命令添加到 /etc/rc.local 文件中,让系统开机时自动运 行,以下是相关命令:

vi /etc/rc.local

在文件末尾添加以下内容保存并退出:
ifconfig eth0:1 192.168.8.43 broadcast 192.168.8.255 netmask 255.255.255.0 up
route add -host 192.168.8.43 dev eth0:1

ifconfig eth0:1 192.168.8.44 broadcast 192.168.8.44 netmask 255.255.255.0 up
route add -host 192.168.8.44 dev eth0:2


下面开始配置基于 IP 的虚拟主机。无论是通过 IP 别名在一台服务器上配置多个 IP 地址,还是通过多块网卡在服务器上配置多个 IP 地址,在 Nginx 中都能将其配置成为基于 IP 的虚拟主机。 接下来在 Nginx 配置文件( nginx.conf 中,分别对 192.168.8.43、192.168.8.44、192.168.8.45三个 IP 配置三个纯静态 HTML 支持的虚拟主机,如下所示:

http   
{                                               
    #第一个虚拟主机
    server
    {
        #监听的 IP 和端口
        listen 192 .168.8.43:80;

        #主机名称
        server_name    192.168.8.43;

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

        location /
        {
           #默认首页文件,顺序从左到右,如采找不到index.html文件,则查找index .htm 文件作为首页文件
            index index.html  index.htm;

            #HTML网页文件存放的目录
            root   /data0/htdocs/server1;
        }
    }

    #第二个虚拟主机.
    server
    {
        #监听的 IP 和端口
        listen              192 .168.8.44:80;

        #主机名称
        server_name      192.168.8.44;

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

        location /
        {
            #默认首页文件,顺序从左到右,如采找不到 index .html 文件,则查找 index .htm 文件作为首页文件
            index  index .html  index.htm;

            #  HTML网页文件存放的目录
            root   /data0/htdocs/server2;
        }
    }

    #第三个虚拟主机
    server
    {
        #监听的 IP 和端口
        listen 192.168.8.45:80;

        #主机名称
        server_name      192.168.8.45;

        #访问日志文件初她径
         access_log logs/server3.access.log combined;

        location  /
        {
            #默认首页文件,顺序从左到右,如果找不到 index.html 文件,则查找 index.htm 文件作为 首页文件
            index   index.html    index.htm;
            
            #   HTML网页文件存放的目录
            root /data0/htdocs/server3.com;
        }
    }
}


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

2.2.3 配置基于域名的虚拟主机
基于域名的虚拟主机是最常见的一种虚拟主机。只需配置你的 DNS 服务器,将每个主机名映射到正确的 IP 地址,然后配置 Nginx 服务器,令其识别不同的主机名就可以了。这种虚拟主机技术,使很多虚拟主机可以共享同一个IP 地址,有效解决了 IP 地址不足的问题。 所以,如果没有特殊要求使你必须用一个基于IP 的虚拟主机,最好还是使用基于域名的虚拟主机。

接下来配置基于域名的虚拟主机。在以下的示例中,配置了三个虚拟主机,第一个虚拟主机 表示所有对域名 aaa.domain.com 的访问都由它来处理,第二个虚拟主机表示所有对域名
bbb.otherdomain.com 的访问都由它来处理,第三个虚拟主机表示对域名  www.domain.com  、domain.com ,以及除了aaa.domain.com之外的所有*.omain.com 二级域名的访问都由它来处理。 每个虚拟主机的网页文件分别存放在了不同的目录中,每个虚拟主机使用了不同的日志文件来记 录访问日志,如下所示。

http
{
#第一个虚拟主机
    server
    {
        #监听的端口
        listen       80;

        #主机名称
        server_name      aaa.domain.com;

        #访问日志文件存放路径
        access_log logs/aaa.domain.com.access.log combined;

        location  /
        {
             #默认首页文件,顺序从左到右,如果找不到工 ndex.html 文件,则查找 index.htm 文件作为 首页文件
             index  index.html  index.htm;

            #HTML网页文件存放的目录
            root   /data0/htdocs/aaa. domain. com;
        }
    }

    #第二个虚拟主机
    server
    {
        #监听的 IP 和端口
        listen      80;

        #主机的名称
        server_name       bbb.otherdomain.com;

        #访问日志文件存放路径
        access_log  logs/bbb.otherdomain.com.access.log.combined;

        location  /
        {
            #默认首页文件,顺序从左到右,如果找不到 index.html 文件,则查找 index.htm 文件作为 首页文件
            index    index.html    index.htm;

            #HTML网页文件存放的目录
            root  /data0/htdocs/bbb.otherdomain.com;
         }
     }

    #第三个虚拟主机
    server
    {
        #监听的 IP 和端口
        listen      80;

        #主机名称
        server_name     www.domain.com domain.com   *.domain.com;

        #访问日志文件存放路径
        access_log logs/bbb.domain.com.access.log  combined;

        location  /
        {
            #默认首页文件,顺序从左到右,如果找不到 index.html 文件,则查找 index.htm 文件作为 首页文件
            index  index.html  index.htm;

            #HTML网页文件存放的目录
            root /data0/htdocs/domain.com;
         }
    }
}


参考资料:
《实战Nginx 取代apache的高性能web服务器》
0
0
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics