nginx快速上手
1、nginx基本概念
(1)nginx是什么,能做什么事情?
Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器
Nginx作为负载均衡服务
处理静态文件,索引文件以及自动索引;打开文件描述符缓冲。
无缓存的反向代理加速,简单的负载均衡和容错。
(2)反向代理
首先要弄明白什么是正向代理:在客户端(浏览器)配置代理服务器,使用代理服务器去访问需要访问的内容
百度解释:(正向代理:如果把局域网外的Internet想象成一个巨大的资源库,则局域网中的客户端要访问Internet,则需要通过代理服务器来访问,这种代理服务就称为正向代理。)
反向代理:恰好和正向代理相反,因为客户端不需要任何配置就可以访问,我们只需要将请求发送到反向代理服务器,由反向代理服务器去选择目标服务器获取数据后,在返回给客户端,此时反向代理服务器和目标服务器对外就是一个服务器,暴露的是代理服务器地址,隐藏了真实服务器IP地址。
百度解释:(反向代理:如果局域网向Internet提供资源服务,让Internet上的其他客户端来访问局域网内的资源,使它们必须通过一个代理服务器来进行访问,这种服务就称为反向代理。正向代理和反向代理逻辑正好相反。)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-m46az7D9-1611972720300)(D:\用户\Desktop\linux笔记\正向代理和反向代理.png)]
(3)负载均衡
请求多了,大了,单个服务器解决不了,我们增加服务器的数量,然后将请求分发到各个服务器上,将原先请求集中到单个服务器上的情况改为将请求分发到多个服务器上,将负载分发到不同的服务器,也就是我们所说的负载均衡。
(4)动静分离
为了加快网站的解析速度,可以把动态页面和静态页面由不同的服务器来解析,加快解析速度,降低原来单个服务器的压力
2、nginx安装,常用命令和配置文件
(1)在liunx系统中安装nginx
1、安装pcre依赖
把安装压缩文件放到linux系统中
解压压缩文件
进入解压之后目录,执行./configure
使用make && make install
安装之后,使用命令,查看版本号 pcre-config --version
2、安装其他的依赖
yum - y install make zlib zlib-devel gcc-c++ libtool
3、安装nginx
a、把nginx安装文件放到linux系统中
b、解压压缩文件 执行./configure
c、使用make && make install
d、安装成功之后,在usr文件夹中多出来一个文件夹local/nginx,在nginx有sbin有启动脚本
e、查看开发的端口号:
firewall-cmd --list-all
f、设置开放的端口号:
firewall-cmd --add-service=http -permanent
sudo firewall-cmd --add-port=80/tcp --permanent
g、重启防火墙:firewall-cmd --reload
(2)nginx常用命令
使用nginx操作命令前提条件:必须进入nginx的目录中:
/usr/local/nginx/sbin
a、查看nginx版本号:./nginx -v
b、启动nginx:./nginx
c、关闭nginx:./nginx -s stop
d、重新加载nginx:(不需要重新启动nginx就加载配置文件) ./nginx -s reload
(3)nginx配置文件
a、配置文件在哪里: /usr/local/nginx/conf/nginx.cong
b、配置文件有哪些部分组成:(由三部分组成)
第一部分:全局块
从配置文件开始到events块之间的内容,主要会设置一些影响nginx服务器整体运行的配置指令,主要包括配置运行nginx服务器的用户(组)、允许生成的worker process 数,进程pid存放路径、日志存放路径和类型以及配置文件的引入等。
比如其中的一行配置为:
worker_processes 1;
这是nginx服务器并发处服务的关键配置,worker_processes的值越大,可以支持的并发处理量越多,但是会受到硬件或者软件等设备的制约;
第二部分:events块
比如其中的配置为:
events{
worker_connections 1024;
}
events块涉及的指令主要影响nginx服务器与用户的网络连接,常用的设置包括是否开启对多 work process下的网络连接进行序列化,是否允许同时接收多个网络连接,选取哪种事件驱动模型来处理连接请求,每个work process可以同时支持的最大连接数等
上述配置就表示每个work process 支出的最大连接数为 1024
这部分配置对nginx性能影响较大,在实际中应该灵活配置。
第三部分:http块
这部分是nginx服务器配置最频繁的部分,代理,缓存,日志定义等绝大多数功能和第三方模块的配置都在这里。
需要注意的是:http块也可以包括http全局块,server块
①、http全局块:http全局块配置的指令包括文件引入、MIME-TYPE定义、日志自定义、连接超时时间、单链接请求数上限等。
②、server块:
这块和虚拟主机有密切关系,虚拟主机从用户角度看,和一台独立的硬件主机是完全一样的,该技术的产生是为了节省互联网服务器硬件成本。
每个http块可以包括多个server块,而每个server块就相当于一个虚拟主机。
而每个server块也分为全局sever块,以及可以同时包含多个location块。
a、全局server块:最常见的配置是本虚拟机主机的监听配置和本虚拟机主机的名称和ip配置。
b、location块:一个server块可以配置多个location块,者块的主要作用是基于nginx服务器接收到的请求字符串(例如:server_name/uri_string),对虚拟主机名称(也可以是IP别名)之外的字符串(例如:前面的/uri_string)进行匹配,对待定的请求进行处理。地址定向、数据缓存和应答控制等功能,还有许多第三方模块的配置也在这里进行。
3、nginx配置实例
a、 反向代理(1):
(1)、实现效果:打开浏览器输入地址https://www.youmingshop.store,跳转到linux系统tomcat的主页面中;
(2)、具体实现:
第一步:在windows系统中的hosts文件进行域名和ip对应关系的配置 ==》 ip + 域名
第二步:在nginx中进行请求转发的配置(反向代理配置)
server {
listen 80;
server_name www.youmingshop.store;
location / {
proxy_pass http://127.0.0.1:8080;
}
}
b、反向代理(2):
(1)、实现效果:使用nginx反向代理,根据访问的路径跳转到不同端口的服务中,nginx监听端口为9001
访问http://47.115.133.4:9001/edu/ 直接跳转到 127.0.0.1:8080
访问http://47.115.133.4:9001/vod/ 直接跳转到 127.0.0.1:8081
(2)、准备工作:
a、准备两个tomcat服务器,一个8080端口,一个8081端口;
b、创建文件夹和测试的页面;
(3)、具体配置:
(1)、找到nginx的配置文件,在里面进行反向代理的配置
server {
listen 9001;
server_name www.youmingshop.store;
locaiton ~ /edu/ {
proxy_pass http://127.0.0.1:8080;
}
locaiton ~ /vod/ {
proxy_pass http://127.0.0.1:8081;
}
}
(2)、需要注意的是要开放访问的端口号;
c、location指令说明:
该指令用于匹配url,语法如下:
location [ = | ~ | ~* | ^~ ] uri {
}
a、= :用于不含正则表达式的uri之前,要求请求字符串和uri严格匹配,如果匹配成功,就停止继续向下搜索并立即处理该请求。
b、~ :用于表示uri包含正则表达式,并且区分大小写。
c、~* :用于表示uri包含正则表达式,并且不区分大小写。
d、^~ :用于不包含正则表达式的uri前,要求nginx服务器找到表示uri和请求字符串匹配度最高的location后,立即使用此location处理请求,而不再使用location块中的正则uri和请求字符串做匹配。
注意:如果uri包含正则表达式则必须要有~ 和 ~*标识。
4、nginx配置实例
a、负载均衡
(1)、实现效果:浏览器地址栏输入地址:http:47.115.133.7/edu/a.html, 负载均衡效果,平均分摊请求到8080端口和8081端口中;
(2)、准备工作:首先准备两台tomcat服务器,当然可以多台,一台8080,一台8081;然后在两台tomcat里面的webapps目录中,创建名称是edu的文件夹,在edu文件夹里创建a.html的页面用于测试;
(3)、在nginx.conf中进行配置
http {
upstream myserver{
#ip_hash; #ip_hash第三章分配策略,加上此策略不需要加权重
server 47.115.133.4:8080 weitht=1;#可以加权重,也没可以不加默认轮询
server 47.115.133.4:8081 weitht=1;
}
server {
listen 80;
server_name www.youmingshop.store;
location / {
proxy_pass http://myserver;
proxy_connect_timeout 10;
}
}
}
b、nginx分配服务器的策略
第一种:轮询(默认),每个请求按照时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。
http {
upstream myserver{
server 47.115.133.4:8080;
server 47.115.133.4:8081;
}
server {
listen 80;
server_name www.youmingshop.store;
location / {
proxy_pass http://myserver;
proxy_connect_timeout 10;
}
}
}
第二种:weight,weight代表权,重默认为1,权重越高被分配的客户端请求越多。
http {
upstream myserver{
server 47.115.133.4:8080 weitht=1;
server 47.115.133.4:8081 weitht=1;
}
server {
listen 80;
server_name www.youmingshop.store;
location / {
proxy_pass http://myserver;
proxy_connect_timeout 10;
}
}
}
第三种:ip_hash,每个请求按访问ip 的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session问题。
http {
upstream myserver{
ip_hash;
server 47.115.133.4:8080;
server 47.115.133.4:8081;
}
server {
listen 80;
server_name www.youmingshop.store;
location / {
proxy_pass http://myserver;
proxy_connect_timeout 10;
}
}
}
第四种:fair(第三方),按后端服务器的响应时间来分配请求,响应时间短的优先分配。
http {
upstream myserver{
server 47.115.133.4:8080;
server 47.115.133.4:8081;
fair;
}
server {
listen 80;
server_name www.youmingshop.store;
location / {
proxy_pass http://myserver;
proxy_connect_timeout 10;
}
}
}
5、nginx配置实例
a、动静分离
nginx动静分离简单来说就是把动态和静态请求分开,不能理解成只是单纯的把动态页面和静态页面物理分离。严格意义来说是将动态请求和静态请求分开,可以理解成使用nginx处理静态页面,tomcat处理动态页面。动静分离从目前实现角度来讲大致分为两种:
一种是纯粹把静态文件独立成单独的域名,放在独立的服务器上,也是目前主流推崇的方案;
一种是动态和静态混合在一起发布,通过nginx来分开;
通过location指定不同的后缀名实现不同你的请求转发
(1)、准备工作:在linux系统中准备静态资源,用于进行访问
(2)、配置nginx.conf配置文件
server {
listen 80;
server_name www.youmingshop.store;
location /www/ {
root /data/;
index index.html index.html;
}
location /image/ {
root /data/;
autoindex on; #列出当前文件夹中的内容
}
}
(3)、最终测试一下:在浏览器中输入地址,http://www.youmingshop.store/image/01.jpg,http://www.youmingshop.store/www/01.html;