一.下载组件和创建用户
1.安装必须组件
yum -y install gcc openssl-devel pcre-devel zlib-devel
2.创建用户
groupadd -r nginx
useradd -r -g nginx -s /bin/false -M nginx
二.下载安装Nginx
1.下载Nginx
wget http://nginx.org/download/nginx-1.5.4.tar.gz
tar zxfv nginx-1.5.4.tar.gz
cd nginx-1.5.4
2.安装Nginx
/var/tmp/nginx
mkdir /var/tmp/nginx/client
./configure \
--prefix=/usr \--sbin-path=/usr/sbin/nginx \--conf-path=/etc/nginx/nginx.conf \--error-log-path=/var/log/nginx/error.log \--http-log-path=/var/log/nginx/access.log \--pid-path=/var/run/nginx/nginx.pid \--lock-path=/var/lock/nginx.lock \--use=nginx \--grou=nginx \--with-http_ssl_module \--with-http_flv_module \--with-http_stub_status_module \--with-http_gzip_static_module \--http-client-body-temp-path=/var/tmp/nginx/client/ \--http-proxy-temp-path=/var/tmp/nginx/proxy/ \--http-fastcgi-temp-path=/var/tmp/nginx/fcgi/ \--http-uwsgi-temp-path=/var/tmp/nginx/uwsgi \--http-scgi-temp-path=/var/tmp/nginx/scgi \--with-pcre
三.Nginx全局设置
#user nobody;worker_processes 1; #根据CPU的数量来调整大小 #error_log logs/error.log;#error_log logs/error.log notice;#error_log logs/error.log info;#pid logs/nginx.pid; worker_rlimit_nofile 65535;events { use epoll; worker_connections 65536;}
ulimit -n 65535 #设置连接数
user是个主模块指令,指定Nginx Worker进程运行用户以及用户组,因为我们在编译安装的时候已经设置过了,这里就标注。
Worker_processes是个主模块指令,指定了Nginx要开启的进程数,如果是多核CPU,建议指定和CPU数量一样多的进程即可。
error_log用来指定全局错误日志文件
pid用来指定进程pid的存储文件位置
worker_rlimit_nofile用于指定一个Nginx进程可以打开的最多文件描述符数目,这里是65535,需要使用指令“ulimit -n 65535”来设置
events指令用来设定Nginx的工作模式及连接数上限
use用来指定Nginx的工作模式,其中select和poll都是标准的工作模式,kqueue和epoll都是高效的工作模式,不同的是epoll用在LINUX平台上,而kqueue用在BSD系统中。对于LINUX系统,epoll工作模式是首选。
worker_connections也是个事件模块指令,用于定义每个进程的最大连接数,默认是1024.
四.HTTP服务器配置
http { include mime.types; default_type application/octet-stream; log_format main '$remote_addr - $remote_user [$time_local] ' '"$request" $status $bytes_sent ' '"$http_referer" "$http_user_agent" ' '"$gzip_ratio"' log_format download '$remote_addr - $remote_user [$time_local]' '"$request" $status $bytes_sent ' '"$http_referer" "$http_user_agent" ' '"$http_range" "$sent_http_content_range"'; client_max_body_size 20m; client_header_buffer_size 32k; large_client_header_buffers 4 32k; tcp_nopush on; tcp_nodelay on; keepalive_timeout 60; client_header_timeout 10; client_body_timeout 10; send_timeout 10;
include是个主模块指令,实现对配置文件所包含的文件的设定,可以减少主配置文件的复杂度。
default_type属于HTTP核心模块指令,这里设定默认类型为二进制流,也就是当文件类型未定义时使用这种方式,例如在没有配置PHP环境时,Nginx是不予解析的,此时,用浏览器访问文件就会出现下载窗口。
clinent_max)body_size用来设置允许客户端请求的最大的单个文件字节数。
client_header_buffer_size用于指定来自客户端请求头的headerbuffer的大小。
large_clientheader_buffers用来指定客户端请求中较大的消息头的缓存最大数量和大小,“4”为个数,“128k”为大小,最大缓存为4个128kb
sendfile参数用于开启高效文件传输模式。
keepalive_timeout用于设置客户端连接保持活动的超过时间。
client_header_timeout用与设置客户端请求头读取超过时间。
client_body_timeout用与设置客户端请求主体读取超过时间,默认为60。
sent_timeout用与指定响应客户端的超时时间。
五.HttpGzip模块配置
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;
gzip用于设置开启关闭gzip模块。
gzip_min_length用于设置允许压缩的页面最小字节数,页面字节数从header头的CONTENT-LENGTH中获取。
gzip_buffers表示申请4个单位为16k的内存作为压缩结果流缓存。
gzip_http_version用于设置识别HTTP协议版本,默认是1.1,目前大多浏览器已经支持gzip压缩。
gzip_comp_level用来指定gzip压缩比,1压缩比最小,处理速度最快;9压缩比最大,传输速度快,但处理最慢,也比较消耗CPU。
gzip_types用来指定压缩类型,无论是否指定,“text/html”类型总是会被压缩的。
gzip_vary选项可以让前端缓存服务器缓存经过gzip压缩的页面,例如,用Squid缓存经过Nginx压缩的数据。
六.负载均衡配置
upstream myserver{ ip_hash ; server 192.168.3.7:80 ; server 192.168.3.8:80 weight=3 max_fails=3 fail_timeout=20s ; server 192.168.3.9:80 weight= 1 max_fails=3 fail_timeout=20s ; server 192 . 168.3.10:80 weight=4 max_fails=3 fail_timeout=20s; }
upstream是NGINX的http Upstream模块,这个模块通过一个简单的调度算法来实现客户端IP到后端服务器的负载均衡。
Nginx的负载均衡模块目前支持4种调度算法:
轮询(默认)
Weight。指定轮询权值,Weight越大,分配到的访问几率就越高,主要用于后端每个服务器性能不均的情况下。
ip_hash,每个请求按访问ip的hash结果分配,这样来自同一个ip的访客固定访问一个后端服务器,有效解决了动态网友存在的session共享问题
fair。这是比上面两个更加智能的负载均衡算法。
url_hash。此方法按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,可以进一步提高后端缓存服务器的效率。
down,表示当前server暂时不参与负载均衡
backup,预留的备份机器
max_fails,允许请求失败的次数,默认为1.
fail_timeout,在经历了max_fails次失败后,暂停访问的时间。
如果像实现故障转移还需要添加模块http proxy模块
七.虚拟主机配置
server { listen 80; server_name www.abc.com; access_log /var/log/abc.access.log; location / { index index.html; root /usr/html/abc/; } } server { listen 80; server_name www.abc1.com; access_log /var/log/abc1.access.log; location / { index index.html; root /usr/html/abc1/; } } server { listen 80; server_name www.abc2.com; access_log /var/log/abc2.access.log; location / { index index.html; root /usr/html/abc2/; } }
server标志定义虚拟主机开始;
listen用于指定虚拟主机的服务端口;
server_name用来指定IP地址或者域名,多个域名之间用空格分开;
index用于设定访问的默认首页地址;
root指令用于指定虚拟主机的网页根目录,这个目录可以是绝对路径,也可以是相对路径;
charset用于设置网页的默认编码格式。
八.URL匹配设置
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ { root /usr/html/abc/; expires 30d; }这段设置是通过location指令来对网页URL进行分析处理,所有扩展名为.gif,jpg,jpeg,png,bmp,swf的静态文件都交给nginx处理
九.StubStatus模块配置
server { listen 80; server_name mail.abc.com; root /usr/html/mail; access_log /var/log/abc.access.log; location / { index index.html; } location /nginx_status { stub_status on; index index.html access_log off; auth_basic "Restricted"; auth_basic_user_file /etc/nginx/htpasswd; } }
stub_status为on表示启用stubstatus的工作状态统计功能。
access_log用来指定stubstatus模块的访问日志文件。
auth_basic是nginx的一种认证机制。
auth_basic_user_file用来指定密码文件
mkdir /usr/html/mail/
yum -y install httpd
htpasswd -c /etc/nginx/htpasswd lisi
New password:
Re-type new password:
Adding password for user lisi
chown nginx.nginx /etc/nginx/htpasswd
访问 ip or domain/nginx_status
Active connections: 2
server accepts handled requests
2 2 3
Reading: 0 Writing: 1 Waiting: 1
Active connections表示当前活跃的连接数,第三行的三个数字表示Nginx当前总共处理了2个连接,成功创建了2吃握手,总共处理了3个请求。最后一行的Reading表示Nginx读取到客户端Header信息数,Writing表示Nginx返回给客户端的header信息数,Waiting表示已经处理完.正在等候下一次请求指令时的驻留连接数。