<--目录-->

1)Nginx理论

2)Nginx搭建


【Nginx理论】

Nginx技能要点

Nginx安装与配置

Nginx虚拟主机

Nginx反向代理



一、nginx简介(能够提供网站服务 和 代理服务 开源软件)

Nginx是俄罗斯人编写的十分轻量级的HTTP服务器


是一个高性能的HTTP和反向代理服务器,同时也是一个

IMAP/POP3/SMTP代理服务器



网站服务器类型 

Apache Nginx tomcat(java语言编写)


nginx 默认地址重写(修改用户访问的url)


conf配置文件   nginx.conf 主配置文件

html网页目录 

logs日志文件

sbin服务启动脚本


绝对路径启动服务

/usr/local/nginx/sbin/naginx  //直接启动服务,不做任何配置

相对路径启动服务

./nginx //直接启动服务,不做任何配置


启动服务

./nginx [选项]

例 ./nginx -t

-t  //测试主配置文件有没有错误

-v  //查看nginx软件的版本

-V  //查看安装时候的配置信息

-c  //启动服务时使用哪一个配置文件   [nginx.conf nginx2.conf]

-h  //查看帮助信息

-s  //关闭服务   #./nginx -s stop



sbin/nginx -c conf/nginx2.conf  //-c后面加上要启动的配置文件名,不加-c默认启动nginx.conf

nginx.conf  nginx2.conf


停止nginx服务 (信号不区分大小写)

格式  :  pkill/kill    -信号    进程名/pid号

例子  :  pkill     -int     nginx

信号

TERM,  INT    快速关闭

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

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

USR1重新打开日志文件

USR2平滑升级可执行程序

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

  


配置说明

安装目录/conf/nginx.conf

全局配置:写在容器外,对所有容器生效

局部配置:写在容器内,只对当前容器有效

全局配置和局部配置同时配置时,局部配置生效



Nginx反向代理服务方式

1、轮询(默认的)每个按请求按时间顺序逐一分配到不同的后端服务器 如果后断服务器down掉能自动剔除


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

Weight=3 weight=2


3、ip_hash 每个请求,按访问ip地址的hash结果分配 这样可以让每个访客固定访问一个后端服务器,可

  以解决session的问题


4、Fair 按后端服务器的响应时间来分配请求 响应时间短的优先分配(装第三方软件才可以使用)



后端服务器组主机设置详细信息

down表示当前的server暂时不参与负载 


backup 其他所有的非backup机器down或者忙的时候 请求会发给backup机器,

       所以这台机器压力会最轻


max_fails 允许请求失败的次数 默认为1 当超过最大次数时 返回proxy_next_upstream模块

          定义的错误


fail_timeout  max_fails次失败后 暂停提供服务的时间 



修改主配置文件

vi /usr/lcoal/nginx/conf/nginx.conf

http {

upstream服务器组名{

   server真正提供服务的服务器的ip地址:端口号;

   server 真正提供服务的服务器的ip地址:端口号;

}

server{

  ...

location / {

  ...

proxy_pass http://服务器组名;//允许整个组被轮询访问

proxy_pass http://ip:80;//设置单独一个IP被访问

}

}

}


配置主配置文件,默认轮询方式

#cd /usr/lcoal/nginx/conf

vi nginx.conf

http {

upstream webgrp {

server192.168.1.10:80;

server  192.168.1.100:80;

}

server{

 ...

  location / {

 ...

    proxy_pass http://webgrp;    //允许整个组被轮询访问

#proxy_pass http://192.168.1.10:80;   //设置单独一个IP被访问

  }

}


}


权重方式配置

#vi nginx.conf

http{

upstream webgrp {

server 192.168.1.10:80 weight=2;//5次访问2次

server 192.168.1.100:80 weight=3;//5次访问3次

}

...

}


ip_hash方式配置

http{

upstream webgrp{

ip_hash;//每个访问客固定访问一个后端服务器

server 192.168.1.10;

server 192.168.1.100;

...

}

}


上述三种配置方式需分开使用

#cd ..;cd sbin

#pkill -hup nginx

公网客户端测试

#elinks --dump http://1.1.1.254


后端服务器组设置

http{

upstream webgrp {

server 192.168.1.1:80 weight=2;

server 192.168.1.10:80 down;  //设置为down状态,服务器请求不会发到这台主机

server 192.168.1.100:80 max_fails=2 fail_timeout=30; //请示最大失败次数2次,30秒内不再提供服务

server 192.168.1.101:80 backup; //这台机器性能低,当其他机器不能提供服务的时候,就用使用备份这台服务器

}

...

}

        网页根目录

location  / { ... }

用来匹配用户访问web服务器时的URL

   可以使用正则表达式匹配用户URL

http://www.baidu.com/music/3.mp3

  .html

  .php

  .css

~   区分字母大小写匹配

~*  不区分字母大小写匹配


!~   区分字母大小写不匹配

!~* 不区分字母大小写不匹配



防盗链:

别的网站盗用了我网站的图片,客户端能通过访问别的公司的网站,点击链接却跳到了我公司的页面

消耗我公司的资源和带宽,因此需要做防盗链,防止别人盗我公司的图片链接



   不区分大小写匹配   以这些做后辍名

location ~*  \.(gif|jpg|png|swf|flv)$ {

valid_referersnoneblocked   www.wsyht.com     *.nginx.com;

来源   没来源   防火墙来的  域 名来的

    无效    引擎

if($invalid_referer){    #上面后辍名以上面的那些来源访问的的就可以访问,不匹配就返回下面的错误页面

#rewrite ^/  http://192.168.1.254/error.html    #返回错误页面

return 404;     #或错误返回404

}

}


nginx可以用本地模块做防盗链

也可以用第三方模块做防盗链


第三方模块

nginxhttpaccessmodules



【Nginx搭建】

一、搭建Nginx服务器(Redhat5.9)

用地址192.168.2.1的服务器做网站服务器

准备工作:

#netstat -tulnp | grep :80

#service httpd stop

#chkconfig --level 35 httpd off

#yum -y groupinstall "开发工具" "开发库"

#yum -y install gcc gcc-c++ make

#yum -y install pcre-devel


安装(源码Nginx包)

#cd

#useradd -M -s /sbin/nologin nginx

#tar -zxvf nginx-0.8.55.tar.gz

#cd nginx-0.8.55

#./configure \

> --prefix=/usr/local/nginx \

> --user=nginx \

> --group=nginx \

> --with-http_stub_status_module \       #提供nginx状态查看功能

> --with-http_ssl_module     #(依赖于openssl openssl-devel)     后期可以通过https访问web服务器

#make && make install

启动服务 

#./nainx


访问本机网页

#elinks --dump http://localhost



二、平滑升级(在不停止服务的情况下升级软件版本)

#cd

#tar -zxvf nginx-1.0.5.tar.gz 

#cd nginx-1.0.5

#./configure \

> --prefix=/usr/local/nginx \

> --user=nginx \

> --group=nginx \

> --with-http_stub_status_module \      

> --with-http_ssl_module \

> --with-http_gzip_static_module 

#make

#cd objs

#mv /usr/local/nginx/sbin/nginx nginx.old

#cp nginx /usr/local/nginx/sbin/

#cd ..

#make upgrade

#/usr/local/naginx/sbin/nginx -v

#elink --dump http://localhost



三、配置Nginx虚拟主机(修改/usr/local/nginx/conf/)

实验1:

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


修改主配置文件

#cd /usr/local/nginx/conf

#vi nginx.conf

...

http{

server{

  listen 80;

  server_name www.wsyht.com;

  location / {

root /www;

index index.html;

  }

}

server{ 

  listen 80;

  server_name bbs.wsyht.com;

  location / {

root /bbs;

index index.html;

  }

}


    }

...


创建网页目录和网页文件

#mkdir /www;echo www.wsyht.com > /www/index.html

#mkdir /bbs;echo bbs.wsyht.com > /bbs/index.html


检测服务

#/usr/local/nginx/sbin/nginx -t


关闭重启服务

#/usr/loca/nginx/sbin/nginx -s stop

#/usr/local/nginx/sbin/nginx 


修改host文件(域名解析)

#vi /etc/hosts

...

192.168.2.1www.wsyht.comwww

192.168.2.1bbs.wsyht.combbs


测试

#elinks --dump http//www.wsyht.com

#elinks --dump http//bbs.wsyht.com



实验二:

配置基于端口的虚拟主机


修改主配置文件

#cd /usr/local/nginx/conf/

#vi nginx.conf

...

http{

server{

  listen 8080;

  server_name dns.baidu.com;

  location / {

root  /dns;

index index.html;

  }    

}

server{

   listen 8090;

  server_name blog.baidu.com;

  location / {

root  /blog;

index index.html;

}

    }

...


创建网页目录和网页文件

#mkdir /dns;echo "www.baidu.com" > /dns/index.html

#mkdir /blog;echo "bbs.baidu.com" > /blog/index.html


服务测试重启

#/usr/local/nginx/sbin/nginx -t

#pkill -hup nginx


修改host文件(域名解析)

#vi /etc/hosts

...

192.168.2.1 www.baidu.com www

192.168.2.1 bbs.baidu.com bbs


测试

elinks --dump http://www.baidu.com:8080 

elinks --dump http://bbs.baidu.com:8090 



实验三

配置基于ip的虚拟主机


修改主配置文件

#cd /usr/local/nginx/conf/

#vim nginx.conf

...

http{

server{

  listen 192.168.2.2:80;

  server_name mail.baidu.com;

  location / {

root  /mail;

index index.html;

  }    

}

server{

   listen 192.168.2.3:80;

  server_name fack.baidu.com;

  location / {

root  /fack

index index.html;

}

    }

...


创建网页目录和网页文件

#mkdir /mail;echo "mail.baidu.com" > /mail/index.html

#mkdir /fack;echo "fack.baidu.com" > /fack/index.html


服务测试重启

#/usr/local/nginx/sbin/nginx -t

#pkill -hup nginx


修改host文件(域名解析)

#vi /etc/hosts

...

192.168.2.2 mail.baidu.com mail

192.168.2.3 fack.baidu.com fack


添加临时虚拟网卡端口

#ifconfig eth0:0 192.168.2.2

#ifconfig eth0:0 192.168.2.3


测试

#elinks --dump http://192.168.2.2

#elinks --dump http://192.168.2.3 



四、客户端访问控制

...

http{

server{

  listen www.baidu.com:80;

  server_name www.baidu.com;

  location / {

allow 192.168.2.2     //允许2.2访问

deny all       //拒绝所有

root  /www;

index index.html;

  }    

}

server{

  listen www.baidu.com:80;

  server_name www.baidu.com;

  location / {

deny 192.168.2.2//拒绝2.2访问

allow all//允许所有

root  /www;

index index.html;

  }    

}

     }

...



五、用户访问控制

#cd /usr/local/nginx/conf

#vi nginx.conf

...

http{

server{

  listen www.baidu.com:80;

  server_name www.baidu.com;

  location / {

auth_basic "auth-domain" //指定认证域的名字,名字随便取

auth_basic_user_file  /usr/local/nginx/conf/authuser.txt //保存用户名的文件,最后面文件名随便取

root  /www;

index index.html;

  }    

}

...

#htpasswd -c /usr/local/nginx/conf/authuser.txt admin //创建文件authuser.txt和访问用户名admin,密码随便填    

#htpasswd  /usr/local/nginx/conf/authuser.txt jack //创建用户名jack,密码随便填    

      


六、Nginx反向代理   


拓扑图:

    公网客户端

     1.1.1.1          http://1.1.1.254

|  1.1.1.254  

|

          | nginx |  反向代理服务器

|

192.158.1.254    | |

              ----------------------------------------------

           |              |

          web_A        web_B   

    192.168.1.10   192.168.1.100


1、配置内网的2台网站服务器 并编写首页文件

详细过程请参考最上面实验,过程略...


2、开启nginx服务器

详细过程请参考最上面实验,过程略...


3、配置nginx反向代理

配置主配置文件,默认轮询方式

#cd /usr/lcoal/nginx/conf

vi nginx.conf

http {

upstream webgrp {

server192.168.1.10:80;

server  192.168.1.100:80;

}

server{

 ...

  location / {

 ...

    proxy_pass http://webgrp;    //允许整个组被轮询访问

  }

}


}


重启服务

#cd ..;cd sbin

#pkill -hup nginx


公网客户端测试

#elinks --dump http://1.1.1.254



防盗料


拓扑图:


192.168.1.10------------192.168.1.100------------------192.168.1.254 

  客户端                  盗链网站nginx网站服务器(配置图片防盗链)


盗链网站配置


启动服务

#servcie httpd start


编写网页文件

#cat /var/www/html/test.html

<html>

        <body>

                <a href="http://192.168.1.254/one.png">show p_w_picpath</a>

        </body>

</html>


重启服务

#service httpd restart



Nginx网站服务器配置


在主配置文件配置防盗链

vi /usr/local/nginx/conf/nginx.conf

http{

server{

...

        location ~* \.(gif|jpg|png|swf|flv)$ {


        valid_referers none blocked www.wsyht.com  *.nginx.com;


          if ($invalid_referer) {

            rewrite ^/  http://192.168.1.254/error.html

            #return 404;

         }

       }    

...

}



配置错误文件

#echo "Error Page" > /usr/local/nginx/html/error.html


编写网页文件

#cat /var/www/html/test.html

<html>

        <body>

                <a href="http://192.168.1.254/one.png">show p_w_picpath</a>

        </body>

</html>


重启服务

#pkill -hup nginx



客户端配置


安装图形界面

#yum groupinstall -y "图形"   //支持图形页面浏览


修改host文件

#vi /etc/hosts

...

192.168.1.254www.wsyht.com www


浏览器访问测试

#http://192.168.1.100/test.html

#http://www.wsyht.com/test.html