Nginx
概念:Nginx("engine x")是一款是由俄罗斯的程序设计师Igor Sysoev所开发高性能的 Web和 反向代理 服务器,也是一个 IMAP/POP3/SMTP 代理服务器。
在高连接并发的情况下,Nginx是Apache服务器不错的替代品。
Nginx能做什么?:反向代理、正向代理、负载均衡、HTTP服务器(包含动静分离)
正向代理:针对客户端而言, 代理服务器代理客户端,转发请求,并将获得的内容返回给客户端。
反向代理:针对客户端而言, 代理服务器就像是原始服务器,代理集群的web节点服务器返回结果。
负载均衡:其意思就是分摊到多个操作单元上进行执行,例如Web服务器、FTP服务器、企业关键应用服务器和其它关键任务服务器等,从而共同完成工作任务。
而Nginx目前支持自带3种负载均衡策略,还有2种常用的第三方策略:
RR :按照轮询(默认)方式进行负载,每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。虽然这种方式简便、成本低廉。但缺点是:可靠性低和负载分配不均衡。
权重 :指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。
upstream test{
server localhost:8080 weight=9;
server localhost:8081 weight=1;
} #此时8080和8081分别占90%和10%。
ip_hash :上面的2种方式都有一个问题,那就是下一个请求来的时候请求可能分发到另外一个服务器,当我们的程序不是无状态的时候(采用了session保存数据),这时候就有一个很大的很问题了,比如把登录信息保存到了session中,那么跳转到另外一台服务器的时候就需要重新登录了,所以很多时候我们需要一个客户只访问一个服务器,那么就需要用iphash了,iphash的每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。
upstream test {
ip_hash;
server localhost:8080;
server localhost:8081;
}
fair(第三方) :按后端服务器的响应时间来分配请求,响应时间短的优先分配。
upstream backend {
fair;
server localhost:8080;
server localhost:8081;
}
url_hash(第三方) :按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。 在upstream中加入hash语句,server语句中不能写入weight等其他的参数,hash_method是使用的hash算法。
upstream backend {
hash $request_uri;
hash_method crc32;
server localhost:8080;
server localhost:8081;
}
HTTP服务器:Nginx本身也是一个静态资源的服务器,当只有静态资源的时候,就可以使用Nginx来做服务器,同时现在也很流行动静分离,就可以通过Nginx来实现,动静分离是让动态网站里的动态网页根据一定规则把不变的资源和经常变的资源区分开来,动静资源做好了拆分以后,我们就可以根据静态资源的特点将其做缓存操作,这就是网站静态化处理的核心思路。
安装:
1、下载 Nginx,下载地址:http://nginx.org/download/nginx-1.6.2.tar.gz
2、解压安装包
[root@proxy lnmp_soft]# tar -xf nginx-1.12.2.tar.gz
3、进入安装包目录
[root@proxy lnmp_soft]# cd nginx-1.12.2/
4、编译安装
(1) 首先安装依赖软件包
[root@proxy nginx-1.12.2]# yum -y install gcc pcre-devel openssl-devel
(2) 创建用户()
[root@proxy nginx-1.12.2]# useradd -s /sbin/nologin nginx
(3) 编译安装
[root@proxy nginx-1.12.2]# ./configure \
--prefix=/usr/local/nginx \ #指定安装路径
--user=nginx \ #指定用户
--group=nginx \ #指定组
--with-http_ssl_module #开启SSL加密功能
[root@proxy nginx-1.12.2]# make && make install #编译并安装
到此,nginx安装完成。
5、nginx命令的用法
[root@proxy ~]# /usr/local/nginx/sbin/nginx #启动服务
[root@proxy ~]# /usr/local/nginx/sbin/nginx -s stop #关闭服务
[root@proxy ~]# /usr/local/nginx/sbin/nginx -s reload #重新启动
[root@proxy ~]# /usr/local/nginx/sbin/nginx -V #查看软件信息
6、查看端口,检查是否启动成功
[root@proxy ~]# netstat -anptu | grep nginx
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 10441/nginx
7、客户端测试访问:
[root@client ~]# firefox http://192.168.4.5
8、实现网页用户认证:通过Nginx实现Web页面的认证,需要修改Nginx配置文件,在配置文件中添加auth语句实现用户认证。最后使用htpasswd命令创建用户及密码即可
① 修改配置文件:
[root@proxy ~]# vim /usr/local/nginx/conf/nginx.conf
.. ..
server {
listen 80;
server_name localhost;
auth_basic "Input Password:"; #认证提示符信息
auth_basic_user_file "/usr/local/nginx/pass"; #认证的密码文件
location / {
root html;
index index.html index.htm;
}
}
② 生成密码文件,创建用户及密码,使用htpasswd命令创建账户文件,需要确保系统中已经安装了httpd-tools。
[root@proxy ~]# yum -y install httpd-tools
[root@proxy ~]# htpasswd -c /usr/local/nginx/pass tom #创建密码文件
New password:
Re-type new password:
Adding password for user tom
[root@proxy ~]# htpasswd /usr/local/nginx/pass jerry #追加用户,不使用-c选项
New password:
Re-type new password:
Adding password for user jerry
③ [root@proxy ~]# /usr/local/nginx/sbin/nginx -s reload #重新加载配置文件
④ 测试访问
[root@client ~]# firefox http://192.168.4.5 #输入密码后可以访问
9、扩展,其他类型主机的配置方法:
10、基于加密网站的主机,源码安装Nginx时必须使用--with-http_ssl_module参数,启用加密模块,对于需要进行SSL加密处理的站点添加ssl相关指令(设置网站需要的私钥和证书)。
1)生成私钥与证书
[root@proxy ~]# cd /usr/local/nginx/conf
[root@proxy ~]# openssl genrsa > cert.key #生成私钥
[root@proxy ~]# openssl req -new -x509 -key cert.key > cert.pem #生成证书
2)修改Nginx配置文件,设置加密网站的虚拟主机
[root@proxy ~]# vim /usr/local/nginx/conf/nginx.conf
… …
server {
listen 443 ssl;
server_name www.c.com;
ssl_certificate cert.pem; #这里是证书文件
ssl_certificate_key cert.key; #这里是私钥文件
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
location / {
root html;
index index.html index.htm;
}
}
3)重新加载配置
[root@proxy ~]# /usr/local/nginx/sbin/nginx -s reload
#请先确保nginx是启动状态,否则运行该命令会报错,报错信息如下:
#[error] open() "/usr/local/nginx/logs/nginx.pid" failed (2: No such file or directory)
步骤二:客户端验证
1)修改客户端主机192.168.4.10的/etc/hosts文件,进行域名解析
[root@client ~]# vim /etc/hosts
192.168.4.5 www.c.com www.a.com www.b.com
2)登录192.168.4.10客户端主机进行测试
[root@client ~]# firefox https://www.c.com #信任证书后可以访问