部署Nginx服务器
常见的web服务器:
unix和linux平台下:
--Apache、Nginx、Lighttpd、
--Tomcat、IBM WebSphere
windows平台下:
--微软公司的IIS(Internet Information Server)
Nginx简介:
--Nginx是俄罗斯人编写的十分轻量级的HTTP服务器
--是一个高性能的HTTP和反向代理服务器,同时也是一个IMAP/POP3/SMTP代理服务器。
一、Nginx安装与配置
1.nginx的安装
因为Nginx的安装有依赖,为了方便建议先把开发工具和开发库安装。因为nginx支持地址重写,修改用户的访问的目标地址(perl+正则表达式),所以依赖pcre;要支持https安装openssl;
因为nginx的进程所有者是nginx,在安装nginx之前先创建nginx用户。
#useradd -M -s /sbin/nologin nginx
安装依赖包,yum源已经配置好:
#yum -y install pcre-devel pcre
#yum -y install openssl
Nginx 用源码包安装,源码包安装四步走:解压、配置、编译、安装。
解压之后进入到目录下
#tar -zxvf nginx-0.8.55.tar.gz
#cd nginx-0.8.55.tar.gz
#./configure \
> --prefix=/usr/local/nginx \
> --user=nginx \
> --group=nginx \
> --with-http_stub_status_module \
> --with-http_ssl_module
#make && make install
#cd /usr/local/nginx/
#ls
conf 配置文件 nginx.conf 主配置文件
html 网页目录
logs 日志文件存放目录
sbin 启动服务的脚本文件存放目录
2启动nginx服务(默认监听80端口)
#service httpd stop httpd服务监听的也是80端口,两者不能同时开启
#chkconfig --level 35 httpd off
#cd /usr/local/nginx/sbin/
#./nginx [选项]
-h 查看帮助信息
-v查看nginx版本
-V查看编译参数
-t测试默认配置文件
-c 指定配置文件
#./nginx 利用脚本启动服务,默认的配置文件在conf/nginx.conf
#netstat -utnlap | grep :80//查看状态
监听端口 80
进程名 nginx
传输协议 tcp
进程所有者 nginx
3.停止服务用杀进程的方式:
pkill -信号 进程名
kill -信号 pid号
信号:
TERM或INT 快速关闭
QUIT 从容关闭,关闭主进程顺便关闭工作子进程
HUP 重载配置用新的配置开始新的工作进程从容关闭旧的工作进程
USR1 重新打开日志文件
USR2 平滑升级可执行程序
WINCH 从容关闭工作进程,不会立即关闭子进程
例:
pkill -HUP nginx
pkill -9 nginx
4访问nginx
在浏览器中输入web服务器的网址,跟httpd服务的访问是同样的
二、平滑升级nginx服务软件版本
平滑升级:在不停止服务的情况下升级软件版本
#tar -zxvf nginx-1.0.9...tar.gz
#cd 解压目录
#./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module --with-http_ssl_module
注:这里的配置选项要和低版本的配置选项相同,至于怎么查看低版本的配置选项用,用前面讲过的-V,在忘记选项的情况下可以用/.nginx -h 查看帮助
#make //编译
#mv /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginxold
#cp objs/nginx /usr/local/nginx/sbin/
#make upgrade
//注意这里是在高版本的目录下执行的
************************************************************************
注:编译完高版本的nginx之后,会生成一个新的目录objs。把低版本目录中的nginx启动脚本改名,或者移除,把objs下的新的nginx脚本拷贝到原来的启动目录,也就是以新换旧
************************************************************************
#./nginx -v //查看一下软件版本
配置完成之后检查一下新的配置文件是否正确
#/usr/local/nginx/sbin/nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
配置正确之后平滑升级:
#kill -USR2 `cat /usr/local/nginx/logs/nginx.pid`
sleep 1
#test -f /usr/local/nginx/logs/nginx.pid.oldbin
#kill -QUIT `cat /usr/local/nginx/logs/nginx.pid.oldbin`
也可以用netstat查看一下当前运行的nginx服务的进程号,用kill -USR2 进程号平滑升级,升级期间服务不需要停止;
二、Nginx虚拟主机
有三种方式:
基于ip地址虚拟主机(通过ip地址区分用户访问) listen ip:端口号
基于端口虚拟主机(通过端口区分用户访问) listen 端口号
基于域名虚拟主机(通过主机名区分用户访问) server_name xxx.xxx.xxx
vim 安装目录/conf/nginx.conf
配置容器:(虚拟主机的配置是在这个容器中加以配置的)
http {
server {
location / {
}
}
}
配置文件的有效配置行如下:
[root@localhost conf]# grep -v -E '#|^$' nginx.conf
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 80; //默认监听80端口
server_name localhost;
location / {
root html;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
配置基于端口的虚拟主机:
http://192.168.1.100:8000 ----> web8000
http://192.168.1.100:8090 ----> web8090
mkdir /web8000//创建网站根目录
mkdir /web8090
echo web8000 > /web8000/index.html //创建测试主页
echo web8090 > /web8090/index.html
#vim nginx-1.conf//编辑新建的配置文件
http {
server {
listen 8000;
location / {
root /web8000;
index index.html;
}
}
server {
listen 8090;
location / {
root /web8090;
index index.html;
}
}
}
[root@localhost sbin]# ./nginx -c /usr/local/nginx/conf/nginx1.conf
//启动时用-c指定启动时的配置文件
[root@localhost sbin]# netstat -untlap | grep nginx
tcp 0 0 0.0.0.0:8000 0.0.0.0:* LISTEN 25423/nginx
tcp 0 0 0.0.0.0:8080 0.0.0.0:* LISTEN 25423/nginx
tcp 0 0 0.0.0.0:8090 0.0.0.0:* LISTEN 25423/nginx
ot@localhost sbin]# elinks --dump http://192.168.1.100:8000
web8000
[root@localhost sbin]# elinks --dump http://192.168.1.100:8090
web8090
[root@localhost sbin]# elinks --dump http://192.168.1.100:8080
Welcome to nginx!
[root@localhost sbin]#
基于ip地址虚拟主机(通过ip地址区分用户访问)
*生产环境中要有对应ip地址的物理网卡。
http://192.168.1.100 --------> web100
http://192.168.1.200 --------> web200
vim nginx1.conf
http {
server {
listen 192.168.1.100:80;
location / {
root /web8000;
index index.html;
}
}
server {
listen 192.168.1.200:80;
location / {
root /web8090;
index index.html;
}
}
}
基于域名的虚拟主机(通过主机名区分用户的访问)
http://www.tarena.com ----------> www
http://bbs.tarena.com ----------> bbs
http {
server {
listen 80;
server_name www.tarena.com;
location / {
root /web8000;
index index.html;
}
}
server {
listen 80;
server_name bbs.tarena.com;
location / {
root /web8090;
index index.html;
}
}
}
三、nginx用户认证+访问控制
location /{
root html;
index index.html;
allow 192.168.8.1;//只允许192.168.8.1访问
deny all;
auth_basic "auth-domain";
//基本摘要类型,引号中为提示信息,可自由发挥
auth_basic_user_file /usr/local/nginx/conf/authuser.txt;
//指定
}
当配置为: deny 192.168.8.1;
allow all;//只拒绝192.168.8.1访问
四、配置反向代理
#vim /usr/local/ngix/conf/nginx.conf
upstream sergrp{//定义源服务器组,名字可自由发挥
server 192.168.1.10:80;
server 192.168.1.20:80;
}
http{
server {
listen 80;
server_name www.tarena.com;
location / {
... ...
proxy_pass http://sergrp;//调用前面定义的服}务组
}
}
upstream 定义后台web服务器,用名称区分多个upstream,访问的时候平均分配访问流量
生产环境中web服务器装的是相同的网页,这样用户访问的时候实现负载均衡
这里的192.168.1.10与192.168.1.20上分别部署web服务器,可以用apache也可以用nginx无所谓,这里的nginx只是配置了一个代理服务器
五、nginx负载均衡
nginx目前支持四种分配方式:
--轮询(默认的):权重为1;每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉能自动剔除
--Weight 指定轮询几率,权重和访问比率成正比,通常用于后端服务器性能不同的情况,默认值为1
--ip_hash 每个请求按访问ip的hash结果分配,这样可以让每个访客固定访问一个后端服务器,可以解决session的问题
--Fair 按后端服务器的相应时间来分配请求 ,响应时间短的优先分配;但不是默认支持的,需要安装第三方软件(哪个服务器的响应时间快把请求发给哪个服务器)
下载ip_fair包并装包
--设置服务器组主机状态
状态类型:
--down :表示当前sever暂时不参与负载
--max_fails:允许请求失败的次数(默认是1),当超过此次数时,返回 proxy_next_upstream模块定义的错误
--fail_timeout :max_fails次失败后,暂停提供服务的时间
--backup:当其他所有的非backup机器down或者忙的时候,请求会发给backup机器,所以这台机器压力会最轻
注:max_fails与fail_timeout组合用timeout的单位是秒;
upstream sergrp{
#ip_hash;
#server 192.168.8.5:80 weight=2;
server 192.168.8.5:80 down;
server 192.168.8.4:80;
server 192.168.8.6:80 backup;
server 192.168.8.3:80 max_fails=2 fail_timeout=30;
}
心得:
1其实nginx的平滑升级,就相当于重新安装一个新的源码包,只不过从原来的源码包安装四步走解压--配置--编译--安装,改为解压--配置--编译--升级。
2需要注意的是,配置高版本的时候配置选项要和低版本当时的配置相同,用-V 查看原有的配置;
3再一个需要注意的是,用新的启动脚本代替原来的启动脚本;
4最后一个需要注意的是make upgrade的时候是在 高版本的目录下,不要搞混
5构建虚拟主机的部分其实跟apache(httpd)服务是相同的原理。