1.什么是nginx?javascript
Nginx 是一个高性能的 Web 和反向代理服务器, 它具备有不少很是优越的特性:php
做为 Web 服务器:相比 Apache,Nginx 使用更少的资源,支持更多的并发链接,体现更高的效率,这点使 Nginx 尤为受到虚拟主机提供商的欢迎。可以支持高达 50,000 个并发链接数的响应,感谢 Nginx 为咱们选择了 epoll and kqueue 做为开发模型.css
做为负载均衡服务器:Nginx 既能够在内部直接支持 Rails 和 PHP,也能够支持做为 HTTP代理服务器 对外进行服务。Nginx 用 C 编写, 不管是系统资源开销仍是 CPU 使用效率都比 Perlbal 要好的多。html
做为邮件代理服务器: Nginx 同时也是一个很是优秀的邮件代理服务器(最先开发这个产品的目的之一也是做为邮件代理服务器),Last.fm 描述了成功而且美妙的使用经验。前端
Nginx 安装很是的简单,配置文件 很是简洁(还可以支持perl语法),Bugs很是少的服务器: Nginx 启动特别容易,而且几乎能够作到7*24不间断运行,即便运行数个月也不须要从新启动。你还可以在 不间断服务的状况下进行软件版本的升级。java
nginx可使用各平台的默认包来安装,本文是介绍使用源码编译安装,包括具体的编译参数信息。mysql
正式开始前,编译环境gcc g++ 开发库之类的须要提早装好,这里默认你已经装好。linux
ububtu平台编译环境可使用如下指令nginx
apt-get install build-essential apt-get install libtool
centos平台编译环境使用以下指令
安装make:
yum -y install gcc automake autoconf libtool make
安装g++:
yum install gcc gcc-c++
下面正式开始
---------------------------------------------------------------------------
通常咱们都须要先装pcre, zlib,前者为了重写rewrite,后者为了gzip压缩。
1.选定源码目录
能够是任何目录,本文选定的是/usr/local/src
cd /usr/local/src
2.安装PCRE库
ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/ 下载最新的 PCRE 源码包,使用下面命令下载编译和安装 PCRE 包:
cd /usr/local/src wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.34.tar.gz tar -zxvf pcre-8.34.tar.gz cd pcre-8.34 ./configure make make install
3.安装zlib库
http://zlib.net/zlib-1.2.8.tar.gz 下载最新的 zlib 源码包,使用下面命令下载编译和安装 zlib包:
cd /usr/local/src wget http://zlib.net/zlib-1.2.8.tar.gz tar -zxvf zlib-1.2.8.tar.gz cd zlib-1.2.8 ./configure make make install
4.安装ssl(某些vps默认没装ssl)
cd /usr/local/src wget http://www.openssl.org/source/openssl-1.0.1c.tar.gz tar -zxvf openssl-1.0.1c.tar.gz
5.安装nginx
Nginx 通常有两个版本,分别是稳定版和开发版,您能够根据您的目的来选择这两个版本的其中一个,下面是把 Nginx 安装到 /usr/local/nginx 目录下的详细步骤:
cd /usr/local/src wget http://nginx.org/download/nginx-1.4.2.tar.gz tar -zxvf nginx-1.4.2.tar.gz cd nginx-1.4.2 ./configure --sbin-path=/usr/local/nginx/nginx \ --conf-path=/usr/local/nginx/nginx.conf \ --pid-path=/usr/local/nginx/nginx.pid \ --with-http_ssl_module \ --with-pcre=/usr/local/src/pcre-8.34 \ --with-zlib=/usr/local/src/zlib-1.2.8 \ --with-openssl=/usr/local/src/openssl-1.0.1c make make install
--with-pcre=/usr/src/pcre-8.34 指的是pcre-8.34 的源码路径。
--with-zlib=/usr/src/zlib-1.2.7 指的是zlib-1.2.7 的源码路径。
安装成功后 /usr/local/nginx 目录下以下
fastcgi.conf koi-win nginx.conf.default fastcgi.conf.default logs scgi_params fastcgi_params mime.types scgi_params.default fastcgi_params.default mime.types.default uwsgi_params html nginx uwsgi_params.default koi-utf nginx.conf win-utf
6.启动
确保系统的 80 端口没被其余程序占用,运行/usr/local/nginx/nginx 命令来启动 Nginx,
netstat -ano|grep 80
若是查不到结果后执行,有结果则忽略此步骤(ubuntu下必须用sudo启动,否则只能在前台运行)
sudo /usr/local/nginx/nginx
打开浏览器访问此机器的 IP,若是浏览器出现 Welcome to nginx! 则表示 Nginx 已经安装并运行成功。
-----------------------------------------------------
到这里nginx就安装完成了,若是只是处理静态html就不用继续安装了
若是你须要处理php脚本的话,还须要安装php-fpm。
下面安装排错
附:可能遇到的错误和一些帮助信息
1.1编译pcre错误
libtool: compile: unrecognized option `-DHAVE_CONFIG_H' libtool: compile: Try `libtool --help' for more information. make[1]: *** [pcrecpp.lo] Error 1 make[1]: Leaving directory `/usr/local/src/pcre-8.34' make: *** [all] Error 2
解决办法:安装g++,别忘了从新configure
apt-get install g++ apt-get install build-essential make clean ./configure make
1.2 make出错
make: *** No rule to make target `build', needed by `default'. Stop. ./configure: error: SSL modules require the OpenSSL library. You can either do not enable the modules, or install the OpenSSL library into the system, or build the OpenSSL library statically from the source with nginx by using --with-openssl= option.
按照第4步的安装方法或
ubuntu下
apt-get install openssl apt-get install libssl-dev
centos下
yum -y install openssl openssl-devel
2.nginx编译选项
make是用来编译的,它从Makefile中读取指令,而后编译。
make install是用来安装的,它也从Makefile中读取指令,安装到指定的位置。
configure命令是用来检测你的安装平台的目标特征的。它定义了系统的各个方面,包括nginx的被容许使用的链接处理的方法,好比它会检测你是否是有CC或GCC,并非须要CC或GCC,它是个shell脚本,执行结束时,它会建立一个Makefile文件。nginx的configure命令支持如下参数:
--prefix=path
定义一个目录,存放服务器上的文件 ,也就是nginx的安装目录。默认使用 /usr/local/nginx。
--sbin-path=path
设置nginx的可执行文件的路径,默认为 prefix
/sbin/nginx
.--conf-path=path
设置在nginx.conf配置文件的路径。nginx容许使用不一样的配置文件启动,经过命令行中的-c选项。默认为prefix
/conf/nginx.conf
.--pid-path=path 设置nginx.pid文件,将存储的主进程的进程号。安装完成后,能够随时改变的文件名 , 在nginx.conf配置文件中使用 PID指令。默认状况下,文件名 为
prefix
/logs/nginx.pid
.--error-log-path=path
设置主错误,警告,和诊断文件的名称。安装完成后,能够随时改变的文件名 ,在nginx.conf配置文件中 使用 的error_log指令。默认状况下,文件名 为prefix
/logs/error.log
.--http-log-path=path
设置主请求的HTTP服务器的日志文件的名称。安装完成后,能够随时改变的文件名 ,在nginx.conf配置文件中 使用 的access_log指令。默认状况下,文件名 为prefix
/logs/access.log
.--user=name
设置nginx工做进程的用户。安装完成后,能够随时更改的名称在nginx.conf配置文件中 使用的 user指令。默认的用户名是nobody。--group=name
设置nginx工做进程的用户组。安装完成后,能够随时更改的名称在nginx.conf配置文件中 使用的 user指令。默认的为非特权用户。--with-select_module
--without-select_module 启用或禁用构建一个模块来容许服务器使用select()方法。该模块将自动创建,若是平台不支持的kqueue,epoll,rtsig或/dev/poll。
--with-poll_module
--without-poll_module
启用或禁用构建一个模块来容许服务器使用poll()方法。该模块将自动创建,若是平台不支持的kqueue,epoll,rtsig或/dev/poll。--without-http_gzip_module
— 不编译压缩的HTTP服务器的响应模块。编译并运行此模块须要zlib库。--without-http_rewrite_module
不编译重写模块。编译并运行此模块须要PCRE库支持。--without-http_proxy_module
— 不编译http_proxy模块。--with-http_ssl_module
— 使用https协议模块。默认状况下,该模块没有被构建。创建并运行此模块的OpenSSL库是必需的。--with-pcre=path
— 设置PCRE库的源码路径。PCRE库的源码(版本4.4 - 8.30)须要从PCRE网站下载并解压。其他的工做是Nginx的./ configure和make来完成。正则表达式使用在location指令和 ngx_http_rewrite_module 模块中。--with-pcre-jit
—编译PCRE包含“just-in-time compilation”(1.1.12中, pcre_jit指令)。--with-zlib=path
—设置的zlib库的源码路径。要下载从 zlib(版本1.1.3 - 1.2.5)的并解压。其他的工做是Nginx的./ configure和make完成。ngx_http_gzip_module模块须要使用zlib 。--with-cc-opt=parameters
— 设置额外的参数将被添加到CFLAGS变量。例如,当你在FreeBSD上使用PCRE库时须要使用:--with-cc-opt="-I /usr/local/include。
.如须要须要增长 select()支持的文件数量
:--with-cc-opt="-D FD_SETSIZE=2048".
--with-ld-opt=parameters
—设置附加的参数,将用于在连接期间。例如,当在FreeBSD下使用该系统的PCRE库,应指定:--with-ld-opt="-L /usr/local/lib".
典型实例(下面为了展现须要写在多行,执行时内容须要在同一行)
./configure --sbin-path=/usr/local/nginx/nginx --conf-path=/usr/local/nginx/nginx.conf --pid-path=/usr/local/nginx/nginx.pid --with-http_ssl_module --with-pcre=../pcre-4.4 --with-zlib=../zlib-1.1.3
3.nginx简单配置详解(从welcome to nginx开始上手)
#运行用户 user nobody; #启动进程,一般设置成和cpu的数量相等 worker_processes 1; #全局错误日志及PID文件 #error_log logs/error.log; #error_log logs/error.log notice; #error_log logs/error.log info; #pid logs/nginx.pid; #工做模式及链接数上限 events { #epoll是多路复用IO(I/O Multiplexing)中的一种方式, #仅用于linux2.6以上内核,能够大大提升nginx的性能 use epoll; #单个后台worker process进程的最大并发连接数 worker_connections 1024; # 并发总数是 worker_processes 和 worker_connections 的乘积 # 即 max_clients = worker_processes * worker_connections # 在设置了反向代理的状况下,max_clients = worker_processes * worker_connections / 4 为何 # 为何上面反向代理要除以4,应该说是一个经验值 # 根据以上条件,正常状况下的Nginx Server能够应付的最大链接数为:4 * 8000 = 32000 # worker_connections 值的设置跟物理内存大小有关 # 由于并发受IO约束,max_clients的值须小于系统能够打开的最大文件数 # 而系统能够打开的最大文件数和内存大小成正比,通常1GB内存的机器上能够打开的文件数大约是10万左右 # 咱们来看看360M内存的VPS能够打开的文件句柄数是多少: # $ cat /proc/sys/fs/file-max # 输出 34336 # 32000 < 34336,即并发链接总数小于系统能够打开的文件句柄总数,这样就在操做系统能够承受的范围以内 # 因此,worker_connections 的值需根据 worker_processes 进程数目和系统能够打开的最大文件总数进行适当地进行设置 # 使得并发总数小于操做系统能够打开的最大文件数目 # 其实质也就是根据主机的物理CPU和内存进行配置 # 固然,理论上的并发总数可能会和实际有所误差,由于主机还有其余的工做进程须要消耗系统资源。 # ulimit -SHn 65535 } http { #设定mime类型,类型由mime.type文件定义 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 指令指定 nginx 是否调用 sendfile 函数(zero copy 方式)来输出文件, #对于普通应用,必须设为 on, #若是用来进行下载等应用磁盘IO重负载应用,可设置为 off, #以平衡磁盘与网络I/O处理速度,下降系统的uptime. sendfile on; #tcp_nopush on; #链接超时时间 #keepalive_timeout 0; keepalive_timeout 65; tcp_nodelay on; #开启gzip压缩 gzip on; gzip_disable "MSIE [1-6]."; #设定请求缓冲 client_header_buffer_size 128k; large_client_header_buffers 4 128k; #设定虚拟主机配置 server { #侦听80端口 listen 80; #定义使用 www.nginx.cn访问 server_name www.nginx.cn; #定义服务器的默认网站根目录位置 root html; #设定本虚拟主机的访问日志 access_log logs/nginx.access.log main; #默认请求 location / { #定义首页索引文件的名称 index index.php index.html index.htm; } # 定义错误提示页面 error_page 500 502 503 504 /50x.html; location = /50x.html { } #静态文件,nginx本身处理 location ~ ^/(images|javascript|js|css|flash|media|static)/ { #过时30天,静态文件不怎么更新,过时能够设大一点, #若是频繁更新,则能够设置得小一点。 expires 30d; } #PHP 脚本请求所有转发到 FastCGI处理. 使用FastCGI默认配置. location ~ .php$ { fastcgi_pass 127.0.0.1:9000; fastcgi_index index