一、Nginx简介
1、Nginx (engine x) 是一个高性能的HTTP和反向代理服务器,也是一个邮件代理服务器、TCP/UDP代理服务器;
2、Nginx 特点是占有内存少,并发处理能力强,以高性能、低系统资源消耗而闻名,Nginx官方测试为5万并发请求;
3、Nginx 的并发处理能力在同类型的Web服务器中表现极好(Lighttpd、Apache),在全世界范围内大量的网站使用了Nginx,国内互联网中也大量使用了Nginx,比如:淘 宝、新浪、网易等;
二、Nginx环境搭建
1、下载官方网站:http://nginx.org
Nginx 有 Windows 版本和 Linux 版本,但更推荐在 Linux 下使用 Nginx;
下载nginx-1.12.2.tar.gz的源代码文件:wget http://nginx.org/download/nginx-1.12.2.tar.gz
2、安装
①解压下载下来的nginx文件,执行命令:tar -zxvf nginx-1.12.2.tar.gz
②切换至解压后的nginx主目录,执行命令:cd nginx-1.12.2
③在nginx主目录下nginx-1.12.2执行命令:./configure --prefix=/usr/local/nginx (其中--prefix是指定nginx安装路径)
④执行命令进行编译:make
⑤执行命令进行安装:make install
3、安装注意事项-----Nginx的安装需要Linux安装相关的几个库,否则编译会出现错误,这几个库分别是:
①gcc编译器是否安装?
检查是否安装:yum list installed | grep gcc
执行安装:yum install gcc -y
②openssl库是否安装?
检查是否安装:yum list installed | grep openssl
执行安装:yum install openssl openssl-devel -y
③pcre库是否安装?
检查是否安装:yum list installed | grep pcre
执行安装:yum install pcre pcre-devel -y
④zlib库是否安装?
检查是否安装:yum list installed | grep zlib
执行安装:yum install zlib zlib-devel -y
⑤后面fastdfs需要的lib库
yum install libevent libevent-devel -y
4、启动
①切换到nginx安装目录的sbin目录下,执行:./nginx -c /usr/local/nginx/conf/nginx.conf
②或者路径指定完整来启动:/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf(其中-c是指定配置文件路径及文件名)
5、关闭
①优雅关闭Nginx:找出nginx的进程号:ps -ef | grep nginx,执行命令:kill -QUIT 主pid
②快速关闭Nginx:kill -TERM 主pid
③平滑重启Nginx:kill -HUP 主pid
6、配置检查
检查Nginx配置文件是否正确:/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf -t
7、其他
Linux上查看nginx版本:/usr/local/nginx/sbin/nginx -V
-v (小写的v)显示 nginx 的版本;
-V (大写的V)显示 nginx 的版本,编译器版本和配置参数;
8、windows下环境搭建
①在官方网站下载最新windows版的nginx:http://nginx.org/en/download.html,将下载下来的nginx压缩包解压缩到一个目录下,解压后该软件就可以启动使用了 ;
②启动方式1:双击解压目录下的nginx.exe文件即可运行nginx,这种方式启动的Nginx若要关闭,请在资源管理器杀掉进程(有两个进程)
启动方式2:进入dos窗口,切换到nginx主目录下,在dos窗口执行命令:start nginx
③关闭nginx,在dos窗口执行命令:nginx -s stop
三、负载均衡
1、负载均衡概述:
负载均衡通常是指将请求【均匀】分摊到集群中多个服务器节点上执行,负载均衡的关键在于【均匀】,这里的均匀是指在一个比较大的统计范围内是基本均匀的, 并不是完全均匀;
2、负载均衡实现方式
①硬件负载均衡
比如 F5、深信服、Array 等,优点是有厂商专业的技术服务团队提供支持,性能稳定;缺点是费用昂贵,对于规模较小的网络应用成本太高。
②软件负载均衡
比如 Nginx、LVS、HAProxy 等,优点是免费开源,成本低廉。
3、Nginx实现负载均衡
通过在Nginx的nginx.conf文件进行配置即可实现配置如下:(①和②)
①在http模块的 #gzip on; 下面加上:(举例)
upstream www.myweb.com {
server 127.0.0.1:9100 weight=1;
server 127.0.0.1:9200 weight=1;
}
其中weight=1表示权重,用于后端服务器性能不均的情况,访问比率约等于权重之比,权重越大访问机会越多;
upstream是配置nginx与后端服务器负载均衡非常重要的一个模块,并且它还能对后端的服务器的健康状态进行检查,若后端服务器中的一台发生故障,则前端的请求不会转发到该故障的机器;
②在server模块里添加:(举例)
location /myweb {
proxy_pass http://www.myweb.com;
}
其中 www.myweb.com 字符串要和 upstream 后面的字符串相等;
四、静态代理
1、把所有静态资源的访问改为访问nginx,而不是访问tomcat,因为nginx更擅长于静态资源的处理,性能更好,效率更高;所以在实际应用中,我们将静态资源比如图片、css、html小文件、js等交给nginx处理,而不是由tomcat处理;Nginx静态代理如何实现?(通过在Nginx的nginx.conf文件进行配置即可实现)
2、方式一:通过在nginx.conf配置文件中添加静态资源的location,比如:
#当访问静态资源,则从linux服务器/opt/static目录下获取(举例)
location ~ .*\.(js|css|htm|html|gif|jpg|jpeg|png|bmp|swf|ioc|rar|zip|txt|flv|mid|doc|ppt|pdf|xls|mp3|wma)$ {
root /opt/static;
}
3、方式二:通过在nginx.conf配置文件中配置静态资源所在目录实现,比如:
location ~ .*/(css|js|img|images) {
root /opt/static;
}
将静态资源放入 /opt/static 目录下,然后用户访问时由nginx返回这些静态资源;
五、动静结合
1、概述
动静结合是实际应用中常见的一种场景,主要是为了实现动静分离;
动态资源,如jsp、servlet等由tomcat或其他web服务器完成;
静态资源,如图片、css、js等由nginx或其他http服务器完成;
让它们各司其职,专注于做自己擅长的事情;
动静结合充分利用了它们各自的优势,从而达到更高效合理的架构。
2、用户 ---->Nginx负载均衡---->一个或多个Tomcat(处理动态资源)+一个或多个Nginx(处理静态资源)
3、示例
upstream www.p2p.com {
server 127.0.0.1:9100 weight=5;
server 127.0.0.1:9200 weight=2;
}
upstream static.p2p.com {
server 127.0.0.1:81 weight=1;
server 127.0.0.1:82 weight=1;
}
①负载均衡Nginx配置:
location /p2p {
proxy_pass http://www.p2p.com;
}
location ~ .*/(css|js|img|images) {
proxy_pass http://static.p2p.com;
}
②静态代理Nginx配置:
location /myweb {
root /opt;
}
六、虚拟主机
1、基于域名的虚拟主机
基于域名的虚拟主机是最常见的一种虚拟主机:
server {
listen 80;
server_name www.myweb.com;
location /myweb {
roxy_pass http://www.myweb.com;
}
}
需要修改一下本地的hosts文件,文件位置:C:\Windows\System32\drivers\etc\hosts
在hosts文件配置:192.168.91.129 www.myweb.com
前面是Linux的IP,后面是你自定义的域名
基于端口的虚拟主机配置,使用端口来区分,浏览器使用域名或ip地址:端口号访问
2、基于端口的虚拟主机
server {
listen 8080;
server_name www.myweb.com;
location /myweb {
proxy_pass http://www.myweb.com;
}
}
server {
listen 9090;
server_name www.myweb.com;
location /p2p {
proxy_pass http://www.p2p.com;
}
}