文章来源:https://www.gulixueyuan.com/my/course/332
一、linux安装Nginx
1.去nginx官网下载nginx压缩包,https://nginx.org
2.工具连接上linux
注意:在安装nginx之前,需要先安装上nginx的依赖包(各包的版本按情况而定)
1) pcre-8.37.tar.gz
2) openssl-1.0.1.tar.gz
3) zlib-1.2.8.tar.gz
4) nginx-1.11.1.tar.gz
当然,安装nginx依赖可以有两种方式安装:一种是通过wget方式下载依赖包解压安装,一种是yum安装
3.综合运用来安装:
3.1.安装pcre,
linux : cd /usr/src
下载到pcre压缩包, 解压: tar -xvf pcre-8.37.tar.gz
解压后,进入pcre-8.37 目录:cd pcre-8.37
然后执行: ./configure (检查编译环境)
然后执行: make && make install (编译安装) pcre-config --version 检查pcre版本号
所以在linux上安装压缩包的步骤是:下载安装包-》解压安装包-》进入解压文件目录-》执行configure-》编译安装
3.2.用yum直接下载并安装openssl、zlib
3.3.nginx安装,把nginx压缩包放入linux, /usr/src 目录下
与pcre安装一样,解压、进入解压的目录、执行./configure检查,执行 make&make install
注意:nginx安装完毕后,我们进入 /usr/local目录下可以看到有一个nginx目录,在 /usr/local/nginx/sbin 目录下可以启动nginx(命令: ./nginx) ,启动后,可通过
ps -ef | grep nginx 查看nginx进程,有进程则开启了nginx
在/usr/local/nginx/conf/ 可以看到有nginx的配置文件: 主配置文件 nginx.conf
3.4nginx安装完后,一般我们linux防火墙是默认禁止访问80端口的,
可以通过命令查看开放的端口号: firewall-cmd --list-all
设置开放的端口号:sudo firewall-cmd --add-port=8080/tcp --permanent
设置开启http服务: firewall-cmd --add-service=http --permanent
更改设置后需要重启防火墙: firewall-cmd --reload
二、nginx操作常用命令
1.启动nginx命令:cd /usr/local/nginx/sbin目录下 执行 ./nginx 启动
2.查看nginx版本:还是在sbin目录下 执行 ./nginx -v
3.通过查看nginx进程来确认nginx是否已经启动: ps -ef | grep nginx
4.关闭nginx命令:还是在sbin目录下 执行 ./nginx -s stop
5.重新加载nginx:还是在sbin目录下 执行 ./nginx -s reload
注意:nginx重新加载作用,因为我们修改了nginx配置文件后,当前运行的进程中用的还是我们之前的配置,如果要用到修改后的配置又不影响nginx运行,那么就执行重新加载命令
三、nginx配置文件
1.nginx配置文件位置: /usr/local/nginx/conf/nginx.conf
2.nginx配置文件内部组成:三部分--全局块、events块、http块
1)全局块:从配置文件开头到events块之间的内容是全局块,主要是用于设置一些影响nginx服务器整体运行的配置指令: 如开启工作进程数: worker_processes 1;(与处理并发有关,当然开启的进程数不是越多越好,要根据cup核数来确定)
2)events块:此块涉及的指令主要是影响nginx服务器与用户的网络连接有关,开启的工作进程下能同时允许同时接收多个网络连接,worker_connections 1024; (最大用户连接数为1024个)
3)http块:是我们配置nginx使用最频繁的块,http块内部又分为: http全局块、server块
3.1http全局块:http全局块配置的指令包括文件引入、MIME-TYPE定义(mime类型定义)、日志自定义、连接超时时间、单连接请求数上限等
3.2server块:这块和虚拟机关系密切,虚拟机即从用户角度看,和一台独立的硬件主机是完全一样的,该技术产生是为了节省互联网服务器成本,每个http块可以包括多个server块,每个server块就相当于一个虚拟主机,而每个server块下又分为 server全局块和多个location块
4.1全局server块:最常见的配置是本虚拟主机的监听配置和本虚拟主机的名称、ip配置
4.2location块:一个server块可以有多个location块,这块的主要作用是基于nginx服务器接收到的请求字符串有关(例如:server_name/uri-string),对虚拟主机名称(也可以是ip别名)之外的字符串进行匹配、对特定的请求进行处理,地址定向,数据缓存和应用控制等功能,还有许多第三方模块的配置也在这里进行。
四、配置反向代理
1.准备工作(安装内部虚拟服务器,开放8080端口,本地映射网站 域名-地址)
反向代理请求示意图:用户请求网站,网站的代理服务器接收到请求,转发给网站的某台应用服进行处理,返回结果再转发给用户端
注意:其中客户端访问的 www.123.com,我们win本地可以在host文件中进行配置
注意:我们一般在浏览器中输入网址,那么请求会先去本host检查有没有 域名对应的ip映射,如果有则直接取这个ip发请求,如果没有则去外部DNS解析获取ip,然后发请求访问目标站的服务器
2.配置nginx反向代理1
nginx配置文件位置:/usr/local/nginx/conf/nginx.conf
vim打开:配置如下图
配置的意思是:客户端请求服务器 192.168.17.129:80, 然后location进行转发至:配置的tomcat虚拟服务器 127.0.0.1:8080,可以注意到,反向代理转发时可以改变端口号,当然,数据返回时,报文数据会被nginx修改再转发给客户端
3.配置nginx反向代理2
实现效果:使用nginx反向代理,根据访问的路径跳转到不同端口的服务中,nginx监听端口为9001
访问 http://127.0.0.1:9001/edu/ 直接跳转到 127.0.0.1:8080
访问 http://127.0.0.1:9001/vod/ 直接跳转到 127.0.0.1:8081
准备两个tomcat服务器,一个8080端口,一个8081端口,并创建文件夹和测试页面
打开配置文件:vim /usr/local/nginx/conf/nginx.conf
在http块中,再添加一个server块,因为之前的server块是监听80端口的,现在这个server块需要监听9001端口。那也就是说不同的server块可以监听不同的端口请求。
需要记得:使用新的端口号,那么就需要防火墙开启端口,以免端口被墙无法访问。
另外需要说明一下:location ~ /edv/ 中的 “~ /edv/”其实就是路由的正则配置、
location [ = | ~ | ~* | ^~] uri { }
1) = :用于不含正则表达式的rul前,要求字符串与uri严格匹配,如果匹配就停止向下搜索并立即处理该请求。
2) ~:用于表示uri包含正则表达式,并且区分大小写
3) ~*:用于表示uri包含正则表达式,并且不区分大小写
4) ^~ : 用于不含正则表达式的uri前,要求nginx服务器找到标识uri和请求字符串匹配度最高的location后,立即使用此location处理请求,而不再使用location块中的正则uri和请求字符串做匹配。
注意:如果uri包含正则表达式,必须有 ~ 或者 ~* 标识
五、配置nginx负载均衡
1.准备工作(反向代理服务器下配置两台相同的应用服务器,访问同一个资源(相同路径)时,代理服务器,通过不同的规则分发给应用服务器去处理请求,达到将大量请求压力分散到多台服务器来处理的目的)
2.配置nginx配置文件
需要说明一下:upstream myserver是定义一组服务器,服务器组名为 myserver,ip_hash是指这组服务器的分发规则,即按什么规则来将请求分配到这些服务器处理。server 115.28.63:8080 weight=1; 添加一个应用服务器,weight表示权重,权重值越高,表示被分配任务的次数要高yidian。
访问效果如下:多次请求,负载均衡会切换不同应用服处理
3.nginx负载均衡分发规则:
1)默认规则:轮询--逐个轮流分配请求,如果其中有一台宕机,那么就会自动剔除掉这台服务器。
2)权重--weight,默认是1 ,权重值越高表示被分配的请求越多
3)ip_hash: 按访问ip的hash结果分配,也就意味着一个客户端,永远只会被分配到固定的一台应用服上(可以解决session共享的问题),但是这种方式要命的是,如果某台应用服宕机了,那么nginx不会剔除这台服务器,那就意味着某一部分客户端就访问一直失败了。
4)fiar--第三方规则,按应用服响应时间来分配请求,响应时间短的优先分配