Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行。由俄罗斯的程序设计师Igor Sysoev所开发。其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好。
Nginx 功能:
1) nginx 作为 http 服务器:类似 apache,tomcat,遵循 http 协议。
a) 访问图片服务器,加载图片
b) 页面静态化:nginx 访问 html 页面。
2) 负载均衡(反向代理服务器)
a) 高并发
b) 提高网站性能
3) 高速缓存
a) 不建议使用。网站访问量较小,可以使用。
4) 保护网站安全。
Nginx 作为 HTTP 服务器,类似 tomcat,访问页面。
业务使用:
1) 访问图片服务器
2) 访问 Freemarker 页面静态化页面
正向代理,针对客户机来说,客户机发送请求,不能直接访问服务器,把请求交给代理服务
器,代理服务器转发请求给目的服务器,获取请求数据,把数据交给用户。
正向代理特点:
1) 从宏观上分析:代理服务器和客户机处于统一机房。
2) 客户机是指定代理服务器存在
3) 代理服务器必须经过配置然后才能使用。
反向代理:针对客户机来说,反向代理服务器针对客户来说是不可见,客户机发送请求,反
向代理服务器转发请求,返回结果。
反向代理特点:
1) 反向代理服务器和项目部署在 同一个机房。
2) 反向代理服务器对客户机是不可见的。
负载均衡是根据 http 重定向转发请求,提高网站性能。
如果集群中请求机器出现宕机,或者比较忙,nginx 修改 http 请求地址,重定向机器完好,或者不忙的机器,提高网站性能。提高网站容错能力。
Nginx 缓存的是一些静态资源:html 页面,样式,js 都可缓存。
主要通过 nginx 和服务器之间防火墙保护网站安全,防火墙只允许经过 nginx 请求通过,其他的请求不能通过。
nginx 是 C 语言开发,建议在 linux 上运行,以下是使用 Centos6.5 作为安装环境。
- gcc
安装 nginx 需要先将官网下载的源码进行编译,编译依赖 gcc 环境,如果没有 gcc 环境,需要安装 gcc:yum install gcc-c++
- PCRE
PCRE(Perl Compatible Regular Expressions)是一个 Perl 库,包括 perl 兼容的正则表达式库。nginx 的 http 模块使用 pcre 来解析正则表达式,所以需要在 linux 上安装 pcre 库。
yum install -y pcre pcre-devel
注:pcre-devel 是使用 pcre 开发的一个二次开发库。nginx 也需要此库。
- zlib
zlib 库提供了很多种压缩和解压缩的方式,nginx 使用 zlib 对 http 包的内容进行 gzip,所以需要在 linux 上安装 zlib 库。
yum install -y zlib zlib-devel
- openssl
OpenSSL 是一个强大的安全套接字层密码库,囊括主要的密码算法、常用的密钥和证书封装管理功能及 SSL 协议,并提供丰富的应用程序供测试或其它目的使用。
nginx 不仅支持 http 协议,还支持 https(即在 ssl 协议上传输 http),所以需要在 linux
安装 openssl 库。
yum install -y openssl openssl-devel
联网环境:NAT 路由模式联网
网关正确,DNS 服务器必须和当前联网 DNS 服务器是一个 IP。
修改命令:vim /etc/sysconfig/network-scripts/ifcfg-eth0
1) 导入 nginx 安装包
a) Rz 命令导入 nginx 安装包到 usr/local/hadoop 目录下面。
2) 解压:tar –zxvf nginx-1.8.0.tar.gz
[root@localhost hadoop]# ll
total 161844
-rw-r--r--. 1 root root 8816567 May 5 2015 apache-tomcat-7.0.61.tar.gz
drwxr-xr-x. 8 uucp 143 4096 Oct 8 2013 jdk1.7.0_45
-rw-r--r--. 1 root root 138094686 May 5 02:08 jdk-7u45-linux-x64.tar.gz
drwxr-xr-x. 8 1001 1001 4096 Apr 21 2015 nginx-1.8.0
-rw-r--r--. 1 root root 832104 Jun 8 2015 nginx-1.8.0.tar.gz
3)设置安装参数
进入 nginx 解压目录进行参数设置:
./configure \
--prefix=/usr/local/hadoop/nginx \
--pid-path=/var/run/nginx/nginx.pid \
--lock-path=/var/lock/nginx.lock \
--error-log-path=/var/log/nginx/error.log \
--http-log-path=/var/log/nginx/access.log \
--with-http_gzip_static_module \
--http-client-body-temp-path=/var/temp/nginx/client \
--http-proxy-temp-path=/var/temp/nginx/proxy \
--http-fastcgi-temp-path=/var/temp/nginx/fastcgi \
--http-uwsgi-temp-path=/var/temp/nginx/uwsgi \
--http-scgi-temp-path=/var/temp/nginx/scgi
--prefix:设置 nginx 安装路径
/var/temp/nginx 目录需要手动创建
创建名令:mkdir -p /var/temp/nginx
3) 编译
编译命令:make
4) 安装
安装命令:make install
5) 启动
a) 进入 nginx 安装目录 sbin
b) ./nginx
6) 访问 nginx
Nginx 启动时候默认加载安装目录 conf/nginx.conf
也可以指定加载配置路径:./nginx –c /usr/local/hadoop/nginx-1.8.0/conf/nginx.conf
1)./nginx
2)./nginx –s reload
1)./nginx –s stop
解析:强制终止 nginx 进程。
2)./nginx –s quit
解析:先让 nginx 把任务完成,然后终止。
worker_processes 1; //全局块
error.log;
error.log notice;
error.log info;
nginx.pid;
events {
worker_connections 1024; //events 块
}
http { //http 块
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server { //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;
}
}
}
全局块:配置影响 nginx 全局参数,配置工作进程数。默认 1
Events:工作连接数,默认 1024.
http 块:配置多个 Server,配置虚拟主机,负载均衡等等。
Server 块:配置服务器,服务器端口,服务器 IP 地址。
Location 块:定位资源文件位置
虚拟主机 (Virtual Host) 是在同一台机器搭建属于不同域名或者基于不同 IP 的多个网站服务的技术. 可以为运行在同一物理机器上的各个网站指配不同的 IP 和端口, 也可让多个网站拥有不同的域名。
1) 基于端口虚拟主机
2) 基于域名虚拟主机
修改 nginx.conf 配置文件:
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;
}
}
server {
listen 81;
server_name localhost;
location / {
root html-81;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
创建资源访问路径
nginx 配置文件 Server 就是我们虚拟主机服务器,访问 81 端口所对应的主机,81 端口所对应资源路径是 location html-81,访问文件夹 html-81 中 index.html
重启 nginx
重启命令:./nginx –s reload
修改 nginx.conf 配置文件:
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 80;
server_name www.jd.com;
location / {
root html;
index index.html index.htm;
}
www.jd.com
Jd.search.com
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
server {
listen 80;
server_name jd.search.com;
location / {
root html-81;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
代理服务器:客户机发送请求给代理服务器,代理 服务器把请求转发 tomcat 服务器,tomcat接受请求,处理请求,返回处理结果给代理服务器,代理服务器返回给客户机。
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
upstream mytomcat1{
server 192.168.66.66:8080;
}
upstream mytomcat2{
server 192.168.66.66:8081;
}
server {
listen 80;
server_name www.e3mall.com;
location / {
proxy_pass http://mytomcat1;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
server {
listen 80;
server_name jd.search.com;
location / {
proxy_pass http://mytomcat2;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
1) 客户机发送请求 www.e3mall.com
2) Nginx 接受请求:通过 nginx.conf 配置主机 Server 地址匹配:www.e3mall.com
3) 匹配成功:就会去 location 下面寻找需要资源
4) 在 location 配置代理:去寻找代理服务器。http://mytomcat1
5) 寻找名称是 mytomcat1 的 upstream
6) Upstream 负责把请求转发 tomcat1,或者 tomcat2
发送一个请求给反向代理服务器,反向代理服务器把请求分发给服务器,如果有服务器宕机,nginx 重定向请求,如果服务器较忙,nginx 也可以转发请求。
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
upstream mytomcat1{
server 192.168.66.66:8080;
server 192.168.66.66:8082;
}
www.jd.com
Jd.search.com
upstream mytomcat2{
server 192.168.66.66:8081;
}
server {
listen 80;
server_name www.jd.com;
location / {
proxy_pass http://mytomcat1;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
server {
listen 80;
server_name jd.search.com;
location / {
proxy_pass http://mytomcat2;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
负载均衡流程:
1) 客户机发送请求给 nginx 服务器
2) Nginx 的 Server 匹配请求地址
3) 从 location 寻找资源,没有静态资源,找代理
4) 通过 proxy_pass 转发 upstream 代理服务器
5) Upstream 代理服务器有 2 台
6) Nginx 根据 nginx 轮询算法访问 tomcat 服务器(2 台服务器都不忙)
1) 轮询
Nginx 代理服务器:upstream 中包含的服务器默认权重都是 1,也就说 tomcat1 和 tomcat2 地
位都是平等,访问规则:ACACACAC…………..
2) 修改权重
访问规则:ACCACCACC…
upstream mytomcat1{
server 192.168.66.66:8080 weight=1;
server 192.168.66.66:8082 weight=2;
}
3) IP绑定 ip_hash
每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。
upstream backserver {
ip_hash;
server 192.168.0.14:88;
server 192.168.0.15:80;
}
4) fair(第三方)
按后端服务器的响应时间来分配请求,响应时间短的优先分配。
upstream backserver {
server server1;
server server2;
fair;
}
5) url_hash(第三方)
按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。
upstream backserver {
server squid1:3128;
server squid2:3128;
hash $request_uri;
hash_method crc32;
}