一、Nginx简介
查看:nginx_百度百科
二、Nginx环境搭建
- 下载
- 官方网站: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
- 安装
- 安装前准备
- nginx是C语言开发,因此同样需要gcc,还需要安装pcre,因为nginx的http模块需要用到pcre,还需要zlib,它提供了解压缩,还需要openssl,Nginx的安装需要Linux安装相关的几个库,否则编译会出现错误,这几个库分别是: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
- 一次性安装,执行如下命令:
- yum install gcc openssl openssl-devel pcre pcre-devel zlib zlib-devel -y
- 正式安装
- 解压下载下来的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
- 安装前准备
- 启动
- 启动nginx执行命令:
- 普通启动:
- 切换到nginx安装目录的sbin目录下,执行:./nginx
- 通过配置文件启动:
- ./nginx -c /usr/local/nginx/conf/nginx.conf
- /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
- (其中-c是指定配置文件,配置文件的路径只能用绝对路径)
- 检查Nginx是否启动:
- 通过查看进程:ps -ef | grep nginx
- nginx 体系结构由 master 进程和其 worker 进程组成
- master 进程读取配置文件,并维护 worker 进程,而 worker 进程则对请求进行实际处理
- 关闭
- Nginx的关闭有多种方式:
- 优雅关闭Nginx:
- 找出nginx的进程号:ps -ef | grep nginx
- 执行命令:kill -QUIT 主pid
- 其中pid是主进程号的pid(master process),其他为子进程pid(worker process)
- 快速关闭Nginx:
- 找出nginx的进程号:ps -ef | grep nginx
- kill -TERM 主pid
- 重启Nginx:
- ./nginx -s reload
- 配置检查
- 当修改Nginx配置文件后,可以使用Nginx命令进行配置文件语法检查,用于检查Nginx配置文件是否正确;
- 检查Nginx配置文件是否正确:
- /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf -t
- 其他
- Linux上查看nginx版本:/usr/local/nginx/sbin/nginx -V
- -v (小写的v)显示 nginx 的版本
- -V (大写的V)显示 nginx 的版本、编译器版本和配置参数
- Windows下环境搭建
- 在官方网站下载最新windows版的nginx:http://nginx.org/en/download.html
- 将下载下来的nginx压缩包解压到一个目录下,解压后该软件就可以启动使用了
- 启动方式1:双击解压目录下的nginx.exe文件即可运行nginx;
- 启动方式2:进入dos窗口,切换到nginx主目录下,在dos窗口执行命令:start nginx
- 关闭方式1:在资源管理器杀掉Nginx进程(有两个进程)
- 关闭方式2:在dos窗口切换到Nginx安装主目录下执行命令:nginx -s stop
三、Nginx配置文件
- Nginx的核心配置文件主要由三个部分构成:
- 基本配置
- events配置
- http配置
- 基本配置
- 多个server配置
四、Nginx主要应用
静态网站,负载均衡,静态代理,动静分离,虚拟主机
五、静态网站
- Nginx是一个HTTP的web服务器,可以将服务器上的静态文件(如HTML、图片等)通过HTTP协议返回给浏览器客户端
- server {
listen 80; #端口号
location /ace {
root /opt/www/; #静态文件路径
}
}
六、负载均衡
- 负载均衡概述
- 在网站创立初期,我们一般都使用单台机器对外提供集中式服务
- 但是随着业务量的增大,我们一台服务器不够用,此时就会把多台机器组成一个集群对外提供服务
- 但是,我们网站对外提供的访问入口通常只有一个,比如 www.web.com
- 那么当用户在浏览器输入www.web.com进行访问的时候,如何将用户的请求分发到集群中不同的机器上呢,这就是负载均衡要做的事情
- 负载均衡通常是指将请求"均匀"分摊到集群中多个服务器节点上执行,这里的均匀是指在一个比较大的统计范围内是基本均匀的,并不是完全均匀
- 负载均衡实现方式
- 硬件负载均衡
- 比如 F5、深信服、Array 等
- 优点是有厂商专业的技术服务团队提供支持,性能稳定
- 缺点是费用昂贵,对于规模较小的网络应用成本太高
- 软件负载均衡
- 比如 Nginx、LVS、HAProxy 等
- 优点是免费开源,成本低廉
- 开源项目实现了负载均衡
- Nginx负载均衡
- Nginx如何实现负载均衡:(通过在Nginx的nginx.conf文件进行配置即可实现)
-
- 配置如下:(配置2步即可)
- ①在http模块加上:(举例)
upstream www.myweb.com {
server 127.0.0.1:9100 weight=3;
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 后面的字符串相等
- Nginx常用负载均衡策略
- Nginx常用负载均衡策略:
- 轮询(默认)
- 每个请求轮流分配到不同的后端服务器,如果后端服务器down掉,将自动剔除
- upstream backserver {
server 127.0.0.1:8080;
server 127.0.0.1:9090;
}
- 权重
- 每个请求按一定比例分发到不同的后端服务器,weight值越大访问的比例越大,用于后端服务器性能不均的情况;
- upstream backserver {
server 192.168.0.14 weight=5;
server 192.168.0.15 weight=2;
}
- ip_hash
- ip_hash也叫IP绑定,每个请求按访问ip的hash值分配,这样每个访问客户端会固定访问一个后端服务器,可以解决会话Session丢失的问题
- upstream backserver {
ip_hash;
server 127.0.0.1:8080;
server 127.0.0.1:9090;
}
- 最少连接
- web请求会被转发到连接数最少的服务器上
- upstream backserver {
least_conn;
server 127.0.0.1:8080;
server 127.0.0.1:9090;
}
- 负载均衡其他几个配置
- upstream backserver {
server 127.0.0.1:9100;
server 127.0.0.1:9200 backup; (其它所有的非backup机器down的时候,才请求backup机器)
} - upstream backserver {
server 127.0.0.1:9100;
server 127.0.0.1:9200 down; (down表示当前的server是down状态,不参与负载均衡)
}
- upstream backserver {
- 硬件负载均衡
七、静态代理
- 把所有静态资源的访问改为访问nginx,而不是访问tomcat,因为nginx更擅长于静态资源的处理,性能更好,效率更高
- 所以在实际应用中,我们将静态资源比如图片、css、html、js等交给nginx处理,而不是由tomcat处理
- Nginx静态代理如何实现?(通过在Nginx的nginx.conf文件进行配置即可实现)
- 步骤如下:
- 通过在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; #指定静态资源所在的目录,nginx的首页也是一个静态资源
}- 其中:
- ~ 表示正则匹配,也就是说后面的内容可以是正则表达式匹配
- 第一个点 . 表示任意字符
- * 表示一个或多个字符
- \. 是转移字符,是后面这个点的转移字符
- | 表示或者
- $ 表示结尾
- 整个配置表示以 .后面括号里面的这些后缀结尾的文件都由nginx处理
- 其中:
- 放置静态资源的目录,要注意一下目录权限问题,如果权限不足,给目录赋予权限
八、动静分离
- Nginx的负载均衡 和 静态代理 结合在一起,我们可以实现动静分离,这是实际应用中常见的一种场景
- 动态资源,如jsp由tomcat或其他web服务器完成
- 静态资源,如图片、css、js等由nginx服务器完成
- 它们各司其职,专注于做自己擅长的事情
- 动静分离充分利用了它们各自的优势,从而达到更高效合理的架构
- 动静分离示例:
- 负载均衡Nginx配置:
- upstream www.web.com {
server 127.0.0.1:9100 weight=5;
server 127.0.0.1:9200 weight=2;
}
upstream static.web.com {
server 127.0.0.1:81 weight=1;
server 127.0.0.1:82 weight=1;
} -
location /web{
proxy_pass http://www.web.com;
}location ~ .*/(css|js|img|images) {
proxy_pass http://static.web.com;
}
- upstream www.web.com {
-
静态代理Nginx配置:
-
location ~ .*/(css|js|img|images) {
root /opt/static;
}
-
-
这样就可以实现动静分离了。
九、虚拟主机
- 虚拟主机,就是把一台物理服务器划分成多个“虚拟”的服务器,这样我们的一台物理服务器就可以当做多个服务器来使用,从而可以配置多个网站
- Nginx提供虚拟主机的功能,就是为了让我们不需要安装多个Nginx,就可以运行多个网站
- Nginx下,一个server标签就是一个虚拟主机
- Nginx的虚拟主机就是通过nginx.conf中server节点指定的,想要设置多个虚拟主机,配置多个server节点即可
- 配置虚拟主机通过有下面两种方式:
- 基于域名的虚拟主机:
- 基于域名的虚拟主机是最常见的一种虚拟主机。
- server {
listen 80;
server_name www.myweb.com;
location /myweb {
proxy_pass http://www.myweb.com;
}
} - 需要修改一下本地的hosts文件,文件位置:C:\Windows\System32\drivers\etc\hosts
- 在hosts文件配置:192.168.208.128 www.myweb.com
- 前面是Linux的IP,后面是你自定义的域名
- 基于端口的虚拟主机:
- 基于端口的虚拟主机配置,使用端口来区分
- 浏览器使用 同一个域名+端口 或 同一个ip地址+端口访问
- 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 /web{
proxy_pass http://www.web.com;
}
}
- 虚拟主机示例
- 城市站点网站(举例说明,我们配置三个城市站点)
-
- 配置3个Tomcat,每个tomcat一个站点,项目部署在tomcat的ROOT目录下
- 配置3个Nginx虚拟主机:
- 方式一:
- 在nginx.conf文件添加三个server节点,用于配置三个虚拟主机
- server {
listen 80;
server_name beijing.myweb.com;
location / {
proxy_pass http://beijing.myweb.com;
}
} - server {
listen 80;
server_name nanjing.myweb.com;
location / {
proxy_pass http://nanjing.myweb.com;
}
} - server {
listen 80;
server_name tianjin.myweb.com;
location / {
proxy_pass http://tianjin.myweb.com;
}
}
- 方式二:
- 通过include的方式引入虚拟主机配置
- include /usr/local/nginx/conf/vhost/vhost.conf;
-
server {
listen 80;
server_name beijing.myweb.com;
location / {
proxy_pass http://beijing.myweb.com;
}
}server {
listen 80;
server_name nanjing.myweb.com;
location / {
proxy_pass http://nanjing.myweb.com;
}
}server {
listen 80;
server_name tianjin.myweb.com;
location / {
proxy_pass http://tianjin.myweb.com;
}
} -
将虚拟目录的配置文件加入到”http {}”部分的末尾,与其他server并列
- 方式一:
-
配置每个虚拟主机请求转发所对应的后端服务器
-
upstream beijing.myweb.com {
server 127.0.0.1:9910;
} -
upstream nanjing.myweb.com {
server 127.0.0.1:9920;
} -
upstream tianjin.myweb.com {
server 127.0.0.1:9930;
}
-
-
修改hosts文件,让Linux的ip指向到一个三个站点的域名
-
192.168.230.128 beijing.myweb.com
192.168.230.128 nanjing.myweb.com
192.168.230.128 tianjin.myweb.com
Nginx基本使用先了解这么多,后期会深入。。。。