一篇文章搞懂nginx的使用
什么是 nginx
- Nginx是一个高性能的 HTTP 和反向代理服务器。特点:占有内存小,并发能力强,事实上nginx 的并发能力确实是同类网页服务器中表现较好。
- Nginx是专门为性能优化而开发,性能是最重要的考量,实现上非常注重效率,能经受高负载的考验,有报告表明支持高达 50000 个并发连接数。
nginx 安装
1.将 Nginx 安装包上传到 Linux 中
官网:http://nginx.org/en/download.html 这里安装使用的 Nginx 版本为 nginx-1.8.0.tar.gz
2 nginx 安装环境
nginx 是 C 语言开发,建议在 linux 上运行
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-developenssl
OpenSSL 是一个强大的安全套接字层密码库,囊括主要的密码算法、常用的密钥和证书封装管理功能及 SSL 协议,并提供丰富的应用程序供测试或其它目的使用。nginx 不仅支持 http 协议,还支持 https(即在 ssl 协议上传输 http),所以需要在linux 安装 openssl 库。
yum install -y openssl openssl-devel
3.编译安装
解压:tar -zxvf nginx-1.8.0.tar.gz
进入到 nginx 的根目录 cd nginx-1.8.0
3.1配置安装参数 ./configure
参数设置如下:
./configure
--prefix=/usr/local/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
注意:上边将临时文件目录指定为/var/temp/nginx,需要在/var 下创建 temp 及 nginx 目录--prefix=/usr/local/nginx决定将 nginx 安装到什么位置,设置了就会自动创建
3.2编译安装 编译:make
编译安装 make install,安装完成之后在/usr/local/nginx/sbin 下有 sbin 的启动脚本
4.操作Nginx
- 使用 nginx 操作的常用命令:必须要进入 nginx 目录中去才行 /usr/local/nginx/sbin
- 查看 nginx 版本号 查看版本号 ./nginx -v
- 查看 nginx 启动状态 ps aux|grep nginx
- 启动 nginx
cd /usr/local/nginx/sbin/
./nginx
注意:执行./nginx 启动 nginx,这里可以-c 指定加载的 nginx 配置文件,如下: ./nginx -c /usr/local/nginx/conf/nginx.conf
如果不指定-c,nginx 在启动时默认加载 conf/nginx.conf 文件,此文件的地址也可以在 编译安装 nginx 时指定./configure 的参数(--conf-path= 指向配置文件(nginx.conf)) - 停止 nginx
方式 1,快速停止:
cd /usr/local/nginx/sbin
./nginx -s stop
此方式相当于先查出 nginx 进程 id 再使用 kill 命令强制杀掉进程。
方式 2,完整停止(建议使用):
cd /usr/local/nginx/sbin
./nginx -s quit
此方式停止步骤是待 nginx 进程处理任务完毕进行停止。 - 重启 nginx
方式 1,先停止再启动(建议使用):
对 nginx 进行重启相当于先停止 nginx 再启动 nginx,即先执行停止命令再执行启动命令。 如下:
./nginx -s quit
./nginx
方式 2,重新加载配置文件:
当 nginx 的配置文件 nginx.conf 修改后,要想让配置生效需要重启 nginx,使用-s reload
不用先停止 nginx 再启动 nginx 即可将配置信息在 nginx 中生效,如下:
./nginx -s reload - 测试
nginx 安装成功,启动 nginx,即可访问虚拟机上的 nginx Nginx 默认的是监听80 端口
正向代理
- 在客户端(浏览器)配置代理服务器,通过代理服务器进行访问,服务端访问的是真实的服务器
反向代理
- 我们只需要将请求发送到反向代理服务器,由反向代理服务器去选择目标服务器获取数据后,在返回给客户端,此时反向代理服务器和目标服务器对外就是一个服务器,暴露的是代理服务器地址,隐藏了真实服务器的 ip 地址。服务端访问的是代理的服务器
负载均衡
- 并发请求较大,使用单一服务器容易造成崩溃。单个服务器解决不了,我们增加服务器的数量,然后将请求额分发到各个服务器上,将原先请求集中到单个服务器上的情况改为分发到多个服务器上,将负载分发到不同的服务器,这就是所说的负载均衡。
动静分离
- 为了加快网站的解析速度,可以吧动态页面和静态页面由不同服务器来解析,加快解析速度,降低单个服务器的压力。这里会使用 Nginx 处理静态页面物理分离,Tomcat 处理动态页面。提供访问效率
nginx 使用
搭建虚拟主机
虚拟主机是一种特殊的软硬件技术,它可以将网络上的每一台计算机分成多个虚拟主 机,每个虚拟主机可以独立对外提供 www 服务,这样就可以实现一台主机对外提供多个 web 服务,每个虚拟主机之间是独立的,互不影响的。
虚拟主机技术是互联网服务器采用的节省服务器硬件成本的技术,虚拟主机技术主要应 用于 HTTP(Hypertext Transfer Protocol,超文本传输协议)服务,将一台服务器的某项或 者全部服务内容逻辑划分为多个服务单位,对外表现为多个服务器,从而充分利用服务器硬 件资源。主要就是节省硬件成本
Nginx 的虚拟主机配置方式
Nginx 支持三种类型的虚拟主机配置
基于 IP 的虚拟主机
这里使用一台 liunx 搭建 2 个 ip,不同 ip 访问不同的 html 页面(这里就是 nginx 的访问首页)
- 第一步,一台 linux 配置多 ip 方式,将动态 ip 改成静态 ip 进入 cd /etc/sysconfig/network-scripts ,进入配置 ,需将配置文件中BOOTPRPTP=static,其次添加另一个 ip 配置内容:保存重启服务即可配置成功。
IPADDR=192.168.10.144
NETMASK=255.255.255.0
GATEWAY=192.168.10.2
DNS1=114.114.114.114
第二步修改 nginx 的配置文件,我这里是在/usr/local/nginx/conf 目录下
Nginx 的配置文件 nginx.conf
如上述配置文件所示,主要由 6 个部分组成:main:用于进行 nginx 全局信息的配置
events:用于 nginx 工作模式的配置
http:用于进行 http 协议信息的一些配置
server:用于进行服务器访问信息的配置 ,一个 server 就是一个虚拟机
location:用于进行访问路由的配置
upstream:用于进行负载均衡的配置
主要是对 http 下 server 和 location 进行修改配置即可
#一个 Server 就是一个虚拟主机 server { listen 80; #为虚拟机指定 IP 或者是域名 server_name 192.168.70.144; #主要配置路由访问信息 location / { #用于指定访问根目录时,访问虚拟主机的 web 目录 就是这个主页的目录 root html144; #在不指定访问具体资源时,默认的展示资源的列表 index index.html index.htm; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } }
基于端口的虚拟主机
基于端口和 ip 配置都差不多这里主要修改 listen 即可
#一个 Server 就是一个虚拟主机 基于端口 server { listen 8080; #为虚拟机指定 IP 或者是域名 server_name 192.168.70.188; #主要配置路由访问信息 location / { #用于指定访问根目录时,访问虚拟主机的 web 目录 root html8080; #在不指定访问具体资源时,默认的展示资源的列表 index index.html index.htm; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } }
基于域名的虚拟主机(以 mac 配置)
修改hosts 下面的映射关系 命令:sudo vi /etc/hosts,进入之后进行映射
192.168.70.188 www.123.com
修改 Nginx 的配置文件完成基于域名的虚拟主机配置
server { listen 80; #为虚拟机指定 IP 或者是域名,这里使用域名 server_name www.123.com; #主要配置路由访问信息 location / { #用于指定访问根目录时,访问虚拟主机的 web 目录 root html-123; #在不指定访问具体资源时,默认的展示资源的列表 index index.html index.htm; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } }
这三种配置方式其实都比较类似主要是修改 配置文件中的 listen,server_name,以及 location 既可以完成
反向代理
这里需要先对 虚拟机ip(nginx 默认端口就是80可省略) 和域名做一个映射,前面已经使用过不在赘述,其次就是修改 nginx.conf配置文件,完成配置
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
## 增加这个属性完成虚拟机代理,表示代理那个服务器
upstream tomcat_server1{
server 192.168.70.143:8080;
}
server {
listen 80;
#为虚拟机指定 IP 或者是域名
server_name com.123.com;
#主要配置路由访问信息 location / {
#用于指定访问根目录时,访问虚拟主机的 web 目录 这里删除 root,root 是去找虚拟机中的目录
proxy_pass http://tomcat_server1;
#在不指定访问具体资源时,默认的展示资源的列表
通过以上配置,重启 nginx 既可以完成代理,通过访问 www.123.com,就可以访问 tomcat 首页
负载均衡
什么是负载均衡
- 负载均衡建立在现有网络结构之上,它提供了一种廉价有效透明的方法扩展 网络设备和服务器的带宽、增加吞吐量、加强网络数据处理能力、提高网络的灵活性和可用性。负载均衡,英文名称为Load Balance,其意思就是分摊到多个操作单元上进行执行,例如 Web 服务器、FTP 服务器、企业关键应用服务器和其它关键任务 服务器等,从而共同完成工作任务。
负载均衡的策略
轮询(默认) 每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器 down 掉,能自动剔除。
指定权重
指定轮询几率,weight 和访问比率成正比,用于后端服务器性能不均的情况。性能高的多处理
upstream backserver {
server 192.168.0.14 weight=10;
server 192.168.0.15 weight=10;
}IP 绑定 ip_hash
每个请求按访问 ip 的 hash 结果分配,这样每个访客固定访 问一个后端服务器,可以解决 session 的问题。
upstream backserver {
ip_hash;
server 192.168.0.14:88;
server 192.168.0.15:80;
}
这里通过同一个 liunx 上使用两个 tomcat 模拟
如何在一个虚拟机配置多个 tomcat?
这里和使用一个 tomcat 的时候是一致的,只需要修改配置文件中的标签即可,进入 tomcat 目录修改
如下标签,主要是为了区分端口号:只要不要和第一个 tomcat 相同即可,默认端口是 8080
配置 nginx 的集群 还是在 nginx.conf 中进行配置,直接在之前反向代理的配置中进行增加即可,即可配置成集群
## 增加这个属性完成虚拟机代理
upstream tomcat_server1{
server 192.168.70.143:8080; ## 直接在后面加权重即可
server 192.168.70.143:9090;
}
节点说明:
在 http 节点里添加:
定义负载均衡设备的 Ip 及设备状态
upstream myServer {
server 127.0.0.1:9090 down;
server 127.0.0.1:8080 weight=2;
server 127.0.0.1:6060;
server 127.0.0.1:7070 backup;
}
在需要使用负载的 Server 节点下添加 proxy_pass http://myServer;
upstream 每个设备的状态:
down 表示单前的 server 暂时不参与负载
weight 默认为 1.weight 越大,负载的权重就越大
fail_timeout:次失败后,暂停的时间 默认 10s
max_fails :允许请求失败的次数默认为 1.当超过最大次数时,返回
backup: 其它所有的非 backup 机器 down 或者忙的时候,请求 backup 机器。所以这台机器压力会最轻。