<--目录-->
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