nginx的简介
- 常用的web服务器简介
web服务器常常被称之为www(world wide web)服务器,HTTP服务器,其主要功能是提供
网上信息浏览服务,Linux和uninx平台下常用的web服务器有Apache、Nginx、Lighttpd、Tomcat
等,下图是http://www.netcraft.com网站2014年最近统计的各web服务器的市场占有率。
从上图可以看出apache一直在web服务器上占有"老大的位置",主要优势在于源代码的开放,有一
支开放的开发队伍,支持跨平台的应用,以及可移植性等。Microsoft 的IIS,IIS是一组服务组件
包括web服务器,ftp服务器,smtp服务器等。
Nginx由于出现的比较晚,市场份额一直处于上升的地步,截至目前,大概占据14.47%。
相对于其他web服务,Nginx主要以下的优势.
1.Nginx使用了最新的epoll(Linux2.6内核)和kqueue(freebsd)网络I/O模型,支持高并发连接
Apache使用的则是传统的select模型,子进程的派生需要消耗的cpu资源较Nginx大的多。
2.内存消耗更小,Nginx+PHP(Fastcgi)在3万并发连接下,开启10个nginx进程,消耗的内存为150M.
3.成本低廉,Nginx遵循BSD开源协议,可以免费使用,并且可用于商业用途
4.配置简单,支持URL等重写功能
2.编译安装Nginx
Nginx是开源软件,可以安装在Microsoft、Unix、Linux等系统上,此处介绍在centos6.6_x86-64
编译安装nginx1.6.2版本,当然你也可以安装其他版本的。nginx官网地址为:www.nginx.org
在官网上可以看到在支持的各个版本,nginx的编译安装需要准备好编译环境,需要的环境,根据
所选择的Nginx功能而不同,主要准备gcc等,nginx支持第三方模块,如果gzip如果安装zlib库等,
以下是我编译时准备的开发环境。
yum groupinstall "Development Tools" "Server Platform Development" yum install -y zlib zlib-devel openssl openssl-devel yum install -y pcre-devel
使用./configure --help可以查看各个选项及其意义
在安装nginx前先创建nginx用户和nginx组,以nginx用户身份来运行nginx的worker process进程
useradd -M -s /sbin/nologin nginx ./configure --prefix=/application/nginx \ #将nginx安装在/application/nginx目录下 --user=nginx \ #以nginx用户来运行worker process进程 --group=nginx --with-http_ssl_module \ #支持ssl功能 --with-http_flv_module \ #支持flv功能 --with-http_gzip_static_module #支持gzip压缩 make make install
可以根据自身想实现的功能选择相应的选项即可,提醒各位在编译安装每一步的时候,查看是否
有错误出现,要解决各个错误后在进行下一步,不然最后编译好了无法使用,回头查看的时候第
一步就出错了。
编译好后,可以查看/application/nginx目录,会发现下面的内容很少。
3.Nginx的启动、停止、平滑重启
Nginx启动命令位于/application/nginx/sbin目录下的唯一一个启动脚本nginx,启动不需要加任
何参数
/application/nginx/sbin/nginx即可,如果配置文件编译时安装在其他目录下,可以使用-c选项
制定其目录,默认会寻找编译目录/application/nginx目录下的conf目录下的nginx.conf,启动后
可以查看服务进程
各位看到的可能只有一个master process 和一个worker process,我这看到3个是因为我修改了
nginx.conf的worker_processes 3;
如果看到以上信息则表面nginx启动正常,如果没有看到,请检查报错信息,此时查看网页,地址
栏中输入nginx服务主机地址,可以看到welcome to nginx的信息,表面访问成功。
nginx停止,可以使用 /application/nginx/sbin/nginx -s stop命令,也可以发送信号,如
kill - QUIT Nginx主进程号
Nginx平滑启动,可以使用 /application/nginx/sbin/nginx -s reload命令,或发送信号如
kill -HUP Nginx主进程号,推荐/application/nginx/sbin/nginx -s reload方式
4.Nginx虚拟主机配置
虚拟主机使用的是一种软硬件技术,把一台运行在internet上的服务器主机分成一台台"虚拟"
的主机,每台虚拟主机都可以是一个独立的网站,具有完整的服务器功能。在Nginx配置文件(nginx.conf)中,每个server中就是一个虚拟主机,如下:
http{ server { listen 80; server_name www.v3.com *.v3.com; access_log logs/access.log combined; location /{ index index.html index.htm; root html/v3; } } }
注意:在nginx中每行后面要有;(分号)作为每行的结束符使用/application/nginx/sbin/nginx -t
会报错,例如:
生产中切记,每次修改后要先检测是否有错误再重启。
4.1 基于域名的虚拟主机的配置
基于域名的虚拟主机是最常见的一种虚拟主机,多个虚拟主机可以共享同一个ip地址,有效解决了
ip地址不足的问题,测试配置如下:
http { server { listen 80; #监听的端口 server_name www.v1.com; access_log logs/access.log combined; #访问日志存放的位置 location /{ index index.html index.htm; #会从左到右查找首页文件 root html/v1; # 网页文件存放的位置 } } server { listen 80; server_name www.v2.com; access_log logs/access.log combined; location /{ index index.html index.htm; root html/v2; } } server { listen 80; server_name www.v3.com *.v3.com; access_log logs/access.log combined; location /{ index index.html index.htm; root html/v3; } } }
以上路径使用的是相对路径,相对于安装目录,在v1、v2、v3目录下分别放置了3个首页文件
下面我们使用crul命令来测试各个域名的文件
可以看到各个域名的首页文件的内容
4.2 基于IP地址的虚拟主机的配置
很容易理解,基于IP的虚拟主机就是一个IP地址上运行一个虚拟主机,由于手上没有那么多的主机
在此我将同一台主机上的一个网卡通过别名的方式配置了多个别名,每个别名上配置了一个ip地址
命令为:
ifconfig eth0:1 192.168.1.6 broadcast 192.168.1.255 netmask 255.255.255.0 up ifconfig eth0:2 192.168.1.7 broadcast 192.168.1.255 netmask 255.255.255.0 up
http { server { listen 192.168.1.3:80; server_name 192.168.1.3; access_log logs/access.log combined; location /{ index index.html index.htm; root html/v1; } } server { listen 192.168.1.6:80; server_name 192.168.1.6; access_log logs/accesss.log combined; location /{ index index.html index.htm; root html/v2; } } server { listen 192.168.1.7:80; server_name 192.168.1.7; access_log logs/access.log combined; location /{ index index.html index.htm; root html/v3; } } }
再次使用crul命令查询,如下:
以上就是基于IP的虚拟主机。
4.3 基于端口的虚拟主机
基于端口就是同一个ip地址不同的端口来创建虚拟主机,如
http { server { listen 80; server_name 192.168.1.3; access_log logs/access.log combined; location /{ index index.html index.htm; root html/v1; } } server { listen 8081; server_name 192.168.1.6; access_log logs/accesss.log combined; location /{ index index.html index.htm; root html/v2; } } server { listen 8080; server_name 192.168.1.7; access_log logs/access.log combined; location /{ index index.html index.htm; root html/v3; } } }