Nginx 安装
nginx是Igor Sysoev编写的一个高性能的HTTP和反向代理服务器,另外它也可以作为邮件代理服务器。第一个公开版本0.1.0发布于2004年10月4日。其将源代码以类BSD许可证的形式发布,因它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名。其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:新浪、网易、腾讯等。据Netcraft统计,在2012年8月份,世界上最繁忙的网站中有11.48%使用Nginx作为其服务器或者代理服务器。
基本的HTTP服务器特性
处理静态文件,索引文件以及自动索引;打开文件描述符缓存;
使用缓存加速反向代理;简单负载均衡以及容错;
远程FastCGI,uwsgi,SCGI,和memcached服务的缓存加速支持;简单的负载均衡以及容错;
模块化的架构。过滤器包括gzip压缩、ranges支持、chunked响应、XSLT,SSI以及图像缩放。在SSI 过滤器中,一个包含多个SSI的页面,如果经由FastCGI或反向代理处理,可被并行处理;
支持SSL,TLS SNI。
其他的HTTP服务器特性
基于名字和IP的虚拟主机;
Keep-alive和pipelined连接支持;
灵活的配置;
重新加载配置以及在线升级时,不需要中断正在处理的请求;
自定义访问日志格式,带缓存的日志写操作以及快速日志轮转;
3xx-5xx错误代码重定向;
重写(rewrite)模块:使用正则表达式改变URI;
根据客户端地址执行不同的功能;
基于客户端IP地址和HTTP基本认证机制的访问控制;
支持验证HTTP referer;
支持PUT、DELETE、MKCOL、COPY以及MOVE方法;
支持FLV流和MP4流;
速度限制;
来自同一地址的同时连接数或请求数限制;
嵌入Perl语言。
邮件代理服务器特性
使用外部HTTP认证服务器重定向用户到IMAP/POP3后端;
使用外部HTTP认证服务器认证用户后重定向连接到内部SMTP后端;
支持的认证方式:
POP3: USER/PASS,APOP, AUTH LOGIN/PLAIN/CRAM-MD5;
IMAP: LOGIN,AUTH LOGIN/PLAIN/CRAM-MD5;
SMTP: AUTH LOGIN/PLAIN/CRAM-MD5;
SSL支持;
STARTTLS和STLS支持。
架构和扩展性
一个主进程和多个工作进程,工作进程以非特权用户运行;
支持的事件机制:kqueue(FreeBSD 4.1+)、epoll(Linux 2.6+)、rt signals(Linux2.2.19+)、/dev/poll(Solaris 7 11/99+)、event ports(Solaris 10)、select以及poll;
众多支持的kqueue特性包括EV_CLEAR、EV_DISABLE(临时禁止事件)、NOTE_LOWAT、EV_EOF,可用数据的数量,错误代码;
支持sendfile(FreeBSD3.1+, Linux 2.2+, Mac OS X 10.5+)、sendfile64(Linux 2.4.21+)和sendfilev(Solaris 8 7/01+);
文件AIO(FreeBSD4.3+, Linux 2.6.22+);
DIRECTIO(FreeBSD 4.4+, Linux 2.4+, Solaris 2.6+, Mac OS X);
支持Accept-filters(FreeBSD4.1+, NetBSD 5.0+)和 TCP_DEFER_ACCEPT(Linux 2.4+);
10000个非活跃的HTTPkeep-alive连接仅占用约2.5M内存;
尽可能避免数据拷贝操作。
本次安装主要作为文件服务器使用:
一、安装前的准备工作:
检查安装nginx的依赖性,nginx的模块需要第三方库的支持,检查是否安装下列库:zlib、zlib-devel、openssl、openssl-devel、prce、prce-devel
1. GCC编译器-程序代码编译工具
Tarball安装方式必须的工具!
首先检验你的服务器环境是否安装gcc,方法如下:
#gcc
如果出现:gcc: no input files 证明已经安装过gcc编译工具!
如果出现:gcc: command not found 说明还没有安装过gcc编译工具!
Redhat系安装方法:yum install gcc
Debian系(包括ubuntu)安装方法:#apt-getinstall gcc
2.PCRE(Perl Compatible Regular Expressions) 库.
PCRE(Perl Compatible Regular Expressions) 库包括 perl 兼容的正规表达式库.这些在执行正规表达式模式匹配时用与Perl 5同样的语法和语义是很有用的.
编译Nginx时需要用到PCRE,同时Nginx的Rewrite和http模块也要用到PCRE的语法!需要安装pcre包pcre-devel包.pcre包负责提供库的编译版本,pcre-devel包提供编译项目时用到的开发头文件和代码!
Redhat系安装方法:
# yum install pcre pcre-devel 或 #yuminstall pcre*,两个命令效果一样,安装的文件也一样!
Debian系(包括ubuntu)安装方法:
#apt-get install libpcre3 libpcre3-dev
3.zlib库
Zlib 软件包包含zlib 库,很多程序中的压缩或者解压缩函数都会用到这个库。Nginx的不同模块使用gzip压缩时会使用到,需要安装zlib和zlib-devel两个包!
Redhat系安装方法:
# yum install zlib zlib-devel
Debian系(包括ubuntu)安装方法:
# apt-get install zlib1g zlib1g-dev
4.OpenSSL
Nginx提供安全网页服务时候需要使用到!需要安装openssl和openssl-devel两个包!
Redhat系安装方法:
# yum install zlib zlib-devel
Debian系(包括ubuntu)安装方法:
# apt-get install openssl openssl-dev
二、nginx安装
# wgethttp://sysoev.ru/nginx/nginx-0.8.13.tar.gz
# tar zxvf nginx-0.8.13.tar.gz
# cd nginx-0.8.13
# ./configure
# make
# make install
三、nginx的配置
1.设置代理参数
nginx安装成功后的安装目录为/usr/local/nginx,在conf文件夹中新建proxy.conf,用于配置一些代理参数,内容如下
#!nginx (-)
# proxy.conf
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr; #获取真实ip
#proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; #获取代理者的真实ip
#client_max_body_size 10m;
client_body_buffer_size 128k;
proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_buffer_size 4k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
2.修改配置文件
编辑安装目录下conf文件夹中的nginx.conf,输入如下内容
#运行nginx所在的用户名和用户组
#user www www;
#启动进程数
worker_processes 8;
#全局错误日志及PID文件
error_log /usr/local/nginx/logs/nginx_error.log crit;
pid /usr/local/nginx/nginx.pid;
#Specifies the value for maximum filedescriptors that can be opened by this process.
worker_rlimit_nofile 65535;
#工作模式及连接数上限
events
{
useepoll;
worker_connections 65535;
}
#设定http服务器,利用它的反向代理功能提供负载均衡支持
http
{
#设定mime类型
include mime.types;
default_type application/octet-stream;
include /usr/local/nginx/conf/proxy.conf;
#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_timeout 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 on;
# gzip_min_length 1k;
# gzip_buffers 4 16k;
# gzip_http_version 1.0;
# gzip_comp_level 2;
# gzip_types text/plainapplication/x-javascript text/css application/xml;
# gzip_vary on;
#limit_zone crawler $binary_remote_addr 10m;
###禁止通过ip访问站点
server{
server_name _;
return 404;
}
server
{
listen 80;
server_name localhost;
index index.html index.htm index.jsp;#设定访问的默认首页地址
root /home/www/web/ROOT;#设定网站的资源存放路径
#limit_conn crawler 20;
location ~ .*.jsp$ #所有jsp的页面均交由tomcat处理
{
index index.jsp;
proxy_pass http://localhost:8080;#转向tomcat处理
}
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ #设定访问静态文件直接读取不经过tomcat
{
expires 30d;
}
location ~ .*\.(js|css)?$
{
expires 1h;
}
#定义访问日志的写入格式
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 /usr/local/nginx/logs/localhost.log access;#设定访问日志的存放路径
}
}
四、nginx配置检测
修改/usr/local/nginx/conf/nginx.conf配置文件后,请执行以下命令检查配置文件是否正确:
1.#/usr/local/nginx/sbin/nginx -t
如果屏幕显示以下两行信息,说明配置文件正确:
1. the configuration file/usr/local/nginx/conf/nginx.conf syntax is ok
2. the configuration file/usr/local/nginx/conf/nginx.conf was tested successfully
如果提示unknown host,则可在服务器上执行:ping www.baidu.com如果也是同样提示unknown host则有两种可能:
a、服务器没有设置DNS服务器地址,查看/etc/resolv.conf下是否设置,若无则加上
b、防火墙拦截
2.启动nginx的命令
#/usr/local/nginx/sbin/nginx
这时,输入以下命令查看Nginx主进程号:
ps -ef | grep "nginx: masterprocess" | grep -v "grep" | awk -F ' ' '{print $2}'
3.nginx的命令
#/usr/local/nginx/sbin/nginx -s stop
4在不停止Nginx服务的情况下平滑变更Nginx配置
a、修改/usr/local/nginx/conf/nginx.conf配置文件后,请执行以下命令检查配置文件是否正确:
#/usr/local/nginx/sbin/nginx -t
如果屏幕显示以下两行信息,说明配置文件正确:
the configuration file/usr/local/nginx/conf/nginx.conf syntax is ok
the configuration file/usr/local/nginx/conf/nginx.conf was tested successfully
b、这时,输入以下命令查看Nginx主进程号:
#ps -ef | grep "nginx: masterprocess" | grep -v "grep" | awk -F ' ' '{print $2}'
屏幕显示的即为Nginx主进程号,例如:
6302
这时,执行以下命令即可使修改过的Nginx配置文件生效:
#kill -HUP 6302
或者无需这么麻烦,找到Nginx的Pid文件:
#kill -HUP `cat/usr/local/nginx/nginx.pid`
nginx启动好后启动tomcat,此时输入http://主机ip地址即可看到“Myweb!”
想要更加深入的了解nginx的话可以去http://tengine.taobao.org/book/index.html 学习