Nginx是一个高性能的http和反向代理服务器,同时也是一个imap/pop3/smtp代理服务器。十分轻量级的http服务。

常用的web服务器

    UNIX和LINUX平台下

    Apache  nginx    lighttpd  Tomcat(JAVA语言编写的)  IBMwebsphere

    Windows平台下

    Intenet   information  server  (IIS)

部署nginx服务器

一、 nginx 安装与配置

    源码包包安装 所以必须安装开发库软件包组合开发工具软件包组。

[root@localhost ~]# yum groupinstall "开发工具" " 开发库" -y

    需要从网上下载软件包。RPM  源码包。

    Nginx可以在服务运行的时候升级。平滑升级。

[root@localhost ~]# useradd -M -s /sbin/nologin nginx
[root@localhost ~]# tail -1 /etc/passwd
[root@localhost nginx-package]# tar zxvf nginx-0.8.55.tar.gz
[root@localhost nginx-0.8.55]# ./configure --help
[root@localhost ~]# rpm -qa | grep ssl
[root@localhost nginx-0.8.55]# ./configure 
指定安装路径--prefix=/usr/local/nginx 
指定用户--user=nginx 
指定组--group=nginx 
支持状态查看--with-http_stub_status_module 
支持https--with-http_ssl_module

Nginx  rewrite   地址重写  支持修改用户访问的目标地址

用perl+正则表达式的方式匹配目标地址

[root@localhost ~]# yum install pcre-devel –y
[root@localhost ~]# rpm -qa | grep -i PCRE
pcre-devel-6.6-6.el5_6.1
pcre-6.6-6.el5_6.1
pcre-6.6-6.el5_6.1
pcre-devel-6.6-6.el5_6.1
[root@localhost nginx-0.8.55]# make
[root@localhost nginx-0.8.55]#make install
[root@localhost nginx]# ls
Conf  存放配置文件  主配置文件nginx.conf
html  网页目录
logs  日志文件
sbin  可执行命令   启动脚本

启动nginx服务  默认监听80端口,要把其他网站服务停掉

[root@localhost conf]# netstat -antup | grep :80
tcp        0      0 :::80                       :::*                        LISTEN      4087/httpd   [root@localhost conf]# /etc/init.d/httpd stop
[root@localhost sbin]# ./nginx –h
-?,-h  : this help    查看帮助信息
-v    : show version and exit    查看版本号
-V   : show version and configure options then exit 查看编译的配置信息
-t    : test configuration and exit  测试配置文件nginx.conf有无错误
-q   : suppress non-error messages during configuration testing
-s signal : send signal to a master process: stop, quit, reopen, reload
-p prefix     : set prefix path (default: /usr/local/nginx/)
-c  filename  : set configuration file (default: conf/nginx.conf)使用指定的配置文件
-g directives : set global directives out of configuration file
[root@localhost sbin]# ./nginx
[root@localhost sbin]# netstat -antup | grep :80
tcp        0      0 0.0.0.0:80                  0.0.0.0:*                   LISTEN      13312/nginx   [root@localhost sbin]# ps aux | grep nginx
传输协议TCP,端口号80,所有者nginx
[root@localhost sbin]# elinks --dump http://localhost
Welcome to nginx!

停止nginx服务

没有提供停止服务的脚本,如果要停止服务杀进程。

Pkill  -信号  进程名
Kill  -信号   pid号

信号:

TREM或INT    快速关闭

QUIT   从容关闭,关闭主进程顺便关闭工作子进程

HUP  重载配置用新的配置开始新的工作进程从容关闭旧的工作进程

USR1  重新打开日志文件

USR2  平滑升级可执行程序

WINCH  从容关闭工作进程  不会立即关闭子进程

[root@localhost sbin]# pkill -HUP nginx
平滑升级nginx软件
[root@localhost nginx-1.0.5]# ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module --with-http_ssl_module
[root@localhost sbin]# mv nginx nginx-old
[root@localhost objs]# mv nginx /usr/local/nginx/sbin/nginx
[root@localhost nginx-1.0.5]# make upgrade 平滑升级
/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`

二、 nginx虚拟主机

基于IP地址虚拟主机(通过IP地址区分用户访问)

基于端口虚拟主机(通过端口区分用户访问)

基于域名虚拟主机(通过主机名区分用户访问)

Vim  安装目录/conf/nginx.conf
http {
server{
location/{
}
}
Server{
}
}
[root@localhost conf]# grep -vE "^$|#" 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;
        server_name  localhost;   
        location / {
            root   html;   网页根目录
            index  index.html index.htm;    首页文件名
        }
        error_page   500 502 503 504  /50x.html;  错误显示页面
        location = /50x.html {
            root   html;
        }
    }
}
[root@localhost conf]# grep -vE "^$|#" nginx.conf > nginx-1.conf
[root@localhost conf]# vim nginx-1.conf
[root@localhost nginx]# pkill -9 nginx
[root@localhost nginx]# sbin/nginx -c conf/nginx-1.conf 
[root@localhost nginx]# netstat -antup | grep :80

基于端口的虚拟主机

[root@localhost ~]# mkdir /web8000
[root@localhost ~]# mkdir /web8090
[root@localhost ~]# echo web8000 > /web8000/index.html
[root@localhost ~]# echo web8090 > /web8090/index.html
[root@localhost nginx]# vim conf/nginx1.conf
server {
        listen  8000;
        location / {
                root /web8000;
                index index.html;
        }
                }
    server {
        listen  8090;
        location / {
                root /web8090;
                index index.html;
        }
                }
[root@localhost nginx]# sbin/nginx -c conf/nginx1.conf
[root@localhost ~]# elinks --dump http://localhost:8000
   web8000
[root@localhost ~]# elinks --dump http://localhost:8090
   web8090

基于IP地址的虚拟主机(通过IP地址区分用户访问)

生产环境中,要有对应IP地址的物理网卡。

[root@localhost ~]# ifconfig eth0:0 192.168.1.100
[root@localhost ~]# ifconfig eth0:1 192.168.1.200
[root@localhost ~]# echo web100 > /web8000/index.html
[root@localhost ~]# echo web200 > /web8090/index.html
[root@localhost nginx]# vim conf/nginx1.conf
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;
        }
                }
[root@localhost nginx]# pkill -9 nginx
[root@localhost nginx]# netstat -antup | grep nginx
tcp        0      0 0.0.0.0:80                  0.0.0.0:*                   LISTEN      17323/nginx    
[root@localhost ~]# elinks --dump http://192.168.1.100
   web100
[root@localhost ~]# elinks --dump http://192.168.1.200
   web200

基于域名的虚拟主机(通过主机名区分用户的访问)

[root@localhost nginx]# vim conf/nginx1.conf
server {
        listen  80;
        server_name www.example.com
        location / {
                root /web8000;
                index index.html;
        }
                }
    server {
        listen  80;
        server_name bbs.example.com
        location / {
                root /web8090;
                index index.html;
        }
                }
[root@localhost ~]# elinks --dump http://bbs.example.com
   web200
[root@localhost ~]# elinks --dump http://www.example.com
   web100
[root@localhost nginx]# pkill -9 nginx
[root@localhost nginx]# sbin/nginx -c conf/nginx1.conf

用户访问控制

//只允许192.168.1.1的访问(小范围的写在上面)

Location /{
Allow192.168.1.1
Allow192.168.1.0/24
Denyall
}

拒绝访问(小范围的写在上面)

Location /{
deny192.168.1.1
deny192.168.1.0/24
allowall
}

用户认证(用户在访问页面的时候呀输入正确的用户名密码才能访问)

Location / {
Auth_basic“auth-domain”;
Auth_basic_user_file/usr/local/nginx/conf/authuser.txt
}

生成用户名密码

[root@www ~]# htpasswd -c /usr/local/nginx/conf/authuser.txt admin

    -c  Create a new file.  指定用户名密码存放的文件

Nginx反向代理(应用层的负载均衡集群)

[root@www nginx]# vim conf/nginx.conf
http {
    upstream ly {
        server 192.168.1.254:80;
        server 192.168.1.2:80;
}
server {
location / {
            proxy_pass http://ly;
}
}
}

Nginx的反向代理优点:

可以自动的对后端的网站服务器进行健康检查。若后端某一台服务器不能提供网站服务时,不会将请求发给这台服务器。

分发时候使用的算法:使用最多为轮询和权重值。

轮询算法:(默认,权重值时1)

将请求平均的分发给服务器组服务器。

Weight  指定轮询几率。权重和访问比率成正比。通常用于后端服务器性能不同的情况,默认值为1.

upstream ly {
        server 192.168.1.254:80 weight=3;
        server 192.168.1.2:80 weight=2;
}

Ip_hash每个请求按访问ip的hash结果分配。这样可以让每个访客固定访问一个后端服务器。可以解决session的问题。

upstream ly {
  ip_hash;
        server 192.168.1.254:80;
        server 192.168.1.2:80;
}

Fair 按后端服务器的响应时间来分配请求响应时间短的优先分配。

不是默认支持。

upstream ly {
  fair;
        server 192.168.1.254:80;
        server 192.168.1.2:80;
}

服务器主机状态类型

Down  表示当前server暂时不参与负载。

Backup: 当其他所有的非backup机器down或者忙的时候,请求会发给backup机器。这台机器压力最轻。

Max_fails: 允许请求失败的次数。默认为1.当超过此次数时,返回proxy_next_upstream模块定义的错误。

Fail_timeout:max_fails次失败后,暂停提供服务的时间。

Nginx的优点。地址重写。防盗链。Nginx做反向代理时能否缓存访问用户的请求。