1 简介
Nginx(发音同 engine x)是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行。由俄罗斯的程序设计师Igor Sysoev所开发,供俄国大型的入口网站及搜索引擎Rambler(俄文:Рамблер)使用。其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:新浪、网易、 腾讯等。
2优点
Nginx 是一个很强大的高性能Web和反向代理服务器,它具有很多非常优越的特性:
在高连接并发的情况下,Nginx是Apache服务器不错的替代品:Nginx在美国是做虚拟主机生意的老板们经常选择的软件平台之一。能够支持高达 50,000 个并发连接数的响应,感谢Nginx为我们选择了 epoll and kqueue作为开发模型。
作为负载均衡服务器:Nginx 既可以在内部直接支持 Rails 和 PHP,也可以支持作为 HTTP代理服务器 对外进行服务。Nginx 用 C 编写, 不论是系统资源开销还是 CPU 使用效率都比 Perlbal 要好的多。作为邮件代理服务器: Nginx 同时也是一个非常优秀的邮件代理服务器(最早开发这个产品的目的之一也是作为邮件代理服务器),Last.fm 描述了成功并且美妙的使用经验。 Nginx 安装非常的简单,配置文件 非常简洁(还能够支持perl语法),Bugs非常少的服务器: Nginx 启动特别容易,并且几乎可以做到7*24不间断运行,即使运行数个月也不需要重新启动。
3安装(源码包)
a低版本
yum -y groupinstall "开发工具" "开发库"
rpm -q make gcc gcc-c++
netstat -utunalp | grep :80 确保80端口没有被占用
useradd -M -s /sbin/no www 默认使用www用户
yum -y install pcre-devel
nginx 地址重写 修改客户端访问自己的url路径
Rewrite 主要的功能就是实现URL的重写,Nginx的Rewrite规则采用Pcre,perl兼容正则表达式的语法规则匹配,如果需要Nginx的Rewrite功能,在编译Nginx之前,需要编译安装PCRE库。
tar -zxvf nginx-0.8.55.tar.gz
./configure --help
./configure --prefix=/usr/local/nginx --user=www 制定安装目录和用户,
--group=www --with-http_stub_status_module 工作组和功能
--with-http_ssl_module
make
make install
在 /usr/local/nginx/ 下
conf/nginx.conf //主配置文件
html //网页目录
logs //日志文件
sbin/nginx //启动脚本
启动服务 /usr/local/nginx/sbin/nginx
停止服务 /usr/local/nginx/sbin/nginx -s stop
nginx 启动脚本常用选项
-h 查看帮助信息
-v 查看nginx版本
-V 查看编译参数 ./configure
-t nginx.conf 测试默认配置文件
-c 安装目录/conf/nginx-2.conf 指定配置文件
-s stop 停止nginx服务
格式 : pkill/kill -信号 进程名/pid号
例子 : pkill -int nginx
信号
TERM, INT 快速关闭
QUIT 从容关闭,关闭主进程顺便关闭工作子进程
HUP 重载配置用新的配置开始新的工作进程从容关闭旧的工作进程
USR1 重新打开日志文件
USR2 平滑升级可执行程序
WINCH 从容关闭工作进程,不会立即关闭子进程
pkill -USR1 nginx
kill -INT `cat /usr/local/nginx/log/nginx.pid`
b平滑升级nginx (在不停止服务,升级软件版本,版本不宜跨度太大)
tar -zxvf nginx-1.0.5.tar.gz
cd nginx-1.0.5
./configure --prefix=/usr/local/nginx --user=www --group=www --with-http_stub_status_module --with-http_ssl_module
make
mv /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginxold
mv nginx-1.0.5/objs/nginx /usr/local/nginx/sbin/
cd nginx-1.0.5
make upgrade
/usr/local/nginx/sbin/nginx -v 查看版本
4基本配置
#运行用户
user www-data;
#启动进程,通常设置成和cpu的数量相等
worker_processes 1;
#全局错误日志及PID文件
error_log /var/log/nginx/error.log;
pid /var/run/nginx.pid;
#工作模式及连接数上限
events {
use epoll; #epoll是多路复用IO(I/O Multiplexing)中的一种方式,但是仅用于linux2.6以上内核,可以大大提高nginx的性能
worker_connections 1024;#单个后台worker process进程的最大并发链接数
# multi_accept on;
}
a 基于域名的虚拟主机(通过主机名区分客户端的访问)
http {
server {
listen 80;
server_name www.zwl.com;
location / {
root /www;
index index.html;
}
}
server {
listen 80;
server_name bbs.zwl.com;
location / {
root /bbs;
index index.html;
}
}
}
b基于端口的虚拟主机(通过端口区分客户端的访问)
http://www.zwl.com:80 www
http://www.zwl.com:8000 bbs
http://www.zwl.com:8090 web
http {
server {
listen 80;
server_name www.zwl.com;
location / {
root /www;
index index.html;
}
}
server {
listen 8000;
server_name www.zwl.com;
location / {
root /bbs;
index index.html;
}
}
server {
listen 8090;
server_name www.zwl.com;
location / {
root /web;
index index.html;
}
}
}
c基于ip的虚拟主机(通过ip区分客户端的访问)
* ip 地址要有对应的物理接口
http://192.168.10.254 www
http://192.168.10.200 bbs
ifconfig eth0 192.168.10.254
ifconfig eth0:0 192.168.10.200
http {
server {
listen 192.168.10.254:80;
#server_name www.zwl.com;
location / {
root /www;
index index.html;
}
}
server {
listen 192.168.10.200:80;
#server_name bbs.zwl.com;
location / {
root /bbs;
index index.html;
}
}
}
d反向代理也可作web的负载均衡
反向代理(Reverse Proxy)方式是指以代理服务器来接受Internet上的连接请求,然后将请求转发给内部网络上的服务器;并将从服务器上得到的结果返回给Internet上请求连接的客户端,此时代理服务器对外就表现为一个服务器。
通常的代理服务器,只用于代理内部网络对Internet的连接请求,客户机必须指定代理服务器,并将本来要直接发送到Web服务器上的http请求发送到代理服务器中。当一个代理服务器能够代理外部网络上的主机,访问内部网络时,这种代理服务的方式称为反向代理服务
验证:客户端访问
看见了吧,同样的域名可以访问不同的页面,nginx他把两台web服务器分别来使用,1:1的
nginx 的 upstream默认是以轮询的方式实现负载均衡,这种方式中,每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。
另外一种方式是ip_hash:每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。
5、用户访问控制
只允许从ip地址是192.168.10.200客户端访问 网站192.168.10.254服务器的8000端口
server {
listen 8000;
server_name www.zwl.com;
location / {
root /bbs;
index index.html;
allow 192.168.10.200;
deny all;
#deny 192.168.10.0/24 ;
#allow all;
}
}
6、用户认证 (用户访问网站页面时要输入正确的用户名和密码才可以访问)
访问用户名wangfang 791001
server {
listen 8000;
server_name www.zwl.com;
location / {
root /bbs;
index index.html;
allow 192.168.10.200;
deny all;
#deny 192.168.10.0/24 ;
#allow all;
auth_basic "input username and password";
auth_basic_user_file /usr/local/nginx/conf/authuser.txt;
}
}
7防盗链
盗 链: 其他的网站盗连你的网站资源 给自己盈利。
location ~* \.(gif|jpg|png|swf|flv)$ {
valid_referers none blocked www.zwl.com .zwl.com;
if ($invalid_referer) {
rewrite ^/ http://192.168.10.254/error.html;
#return 404;
}
}
这就是防止其他网站访问图片的例子,只有在本机和本域才能访问的