首页 资讯频道 互联频道 智能频道 网络 数据频道 安全频道 服务器频道 存储频道

什么是Nginx?Nginx原理以及应用场景解析

2020-11-09 09:08:07 来源 : 浅羽的IT小屋公众号

Nginx是一个http服务器,是一个使用c语言开发的高性能的http服务器及反向代理服务器。Nginx是一款高性能的http服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器。由俄罗斯的程序设计师Igor Sysoev所开发,官方测试Nginx能够支撑5万并发链接,并且cpu、内存等资源消耗却非常低,运行非常稳定。本文将为大家详细介绍关于Nginx的原理以及在应用场景下的相关解析。

1. Nginx的概念?

「什么是Nginx呢:」

Nginx是一个基于HTTP的反向代理服务器,也是一个基IMAP/POP3/SMTP服务邮件服务器

反向代理服务器:现在我们A需要访问的目标B服务器的10.7.182.100,我要访问这个B服务器上的资源,现在如果使用了Nginx之后,我可以通过Nginx服务器从而达到访问10.7.182.100这个服务器的目的

IMAP/POP/SMTP:这三个是邮件的传输协议

邮件服务器:发送邮件 接收邮件

Web服务器:本身是一个Web服务器的软件,类似于Tomcat这种Web服务的软件

「Nginx能干什么呢:」

可以作为Web服务器

可以作为邮件服务器

可以作为反向代理的服务器

动静分离(就是将动态资源和静态资源分隔开)

可以实现负载均衡

2、Nginx的安装

「Nginx安装步骤:」

第一步:下载我们的nginx这里以1.6.2版本为例

第二步:共享安装文件到我们的linux上面

第三步:将文件拷贝到/usr/local下面

第四步:安装tar-zxvfxxxx.tar.gz

第五步:下载所需要的依赖库yuminstallpcreyuminstallpcre-develyuminstallzlibyuminstallzlib-devel

第六步:进行config的配置

cdnginx-1.6.2&&./configure--prefix=/usr/local/nginx

第七步:安装

make&&makeinstall

第八步:启动nginx

/usr/local/nginx/sbin/nginx

关闭:....-sstop-sreload

查看端口是否有问题

netstat-tunpl|grep80

浏览器进行验证没问题就可以

3、Nginx的配置文件的解析

「配置文件:」

#usernobody;

#工作的线程(4核8线程那么下面就设置成8物理硬件有关)

worker_processes1;

#全局的错误日志存放的地方

#error_loglogs/error.log;

#全局错误日志存放的地方后面的notice表示的是输出错误日志的格式

#error_loglogs/error.lognotice;

#error_loglogs/error.loginfo;

#nginx进程号存放的地方

#pidlogs/nginx.pid;

#最大的连接数(这个也跟硬件是有关系的)

events{

worker_connections1024;

}

#下面就是跟HTTP请求有关系的了

http{

#表示的是当前服务器支持的类型

includemime.types;

#默认传输的数据类型是流

default_typeapplication/octet-stream;

#声明了一种日志格式这种日志格式的名字叫做main

log_formatmain'$remote_addr-$remote_user[$time_local]"$request"'

'$status$body_bytes_sent"$http_referer"'

'"$http_user_agent""$http_x_forwarded_for"';

#表示的是每一次请求的日志记录格式就是上面的main格式

access_loglogs/access.logmain;

#是否可以发送文件

sendfileon;

#tcp_nopushon;

#这个是双活的超时的时间

#keepalive_timeout0;

keepalive_timeout65;

#是否打开文件的压缩

#gzipon;

#虚拟一个主机

#负载均衡的配置

upstreamqianyu{

ip_hash;

server10.7.182.110:8080;

server10.7.182.87:8080;

}

#server{

#listen90;

#server_namelocalhost;

#location/{

#rootqianyu;

#indexqianyu.html;

#}

#做一个反向代理

#表示的是如果你访问的后缀是.jpg结尾的话那么就访问下面的另外的服务器

#location~\.jpg${

#proxy_passhttp://10.7.182.110:8080;

#}

#下面要演示一个负载均衡的例子

#location~\.jpg${

#proxy_passhttp://qianyu;

#}

#}

#虚拟一个动静分离的机器

server{

listen9999;

server_namelocalhost;

#表示的是动态资源访问的机器

location/{

proxy_passhttp://10.7.182.54:8080;

}

#表示的是非css和js文件访问的地址

location~.*\.(htm|html|gif|jpg|jpeg|png|bmp|swf|ioc|rar|zip|txt|flv|mid|doc|ppt|pdf|xls|mp3|wma)$

{

root/usr/local/webapp;

expires30d;

}

#表示的是css和js的访问地址

location~.*\.(js|css)?$

{

root/usr/local/webapp;

expires1h;

}

}

#虚拟了服务器

server{

#端口是80

listen80;

#这个表示的是虚拟服务器默认访问的是本机

server_namelocalhost;

#这个是虚拟服务器的编码

#charsetkoi8-r;

#当前服务器的日志的存储的地方

#access_loglogs/host.access.logmain;

#做了一个地址的映射

location/{

roothtml;

indexindex.htmlindex.htm;

}

#如果报404的时候访问的页面

#error_page404/404.html;

#redirectservererrorpagestothestaticpage/50x.html

#报错50开头的是就访问50x.html

error_page500502503504/50x.html;

#下面对50x.html又做了一个映射就访问根目录下的html中的50x.html

location=/50x.html{

roothtml;

}

#proxythePHPscriptstoApachelisteningon127.0.0.1:80

#

#location~\.php${

#proxy_passhttp://127.0.0.1;

#}

#passthePHPscriptstoFastCGIserverlisteningon127.0.0.1:9000

#

#location~\.php${

#roothtml;

#fastcgi_pass127.0.0.1:9000;

#fastcgi_indexindex.php;

#fastcgi_paramSCRIPT_FILENAME/scripts$fastcgi_script_name;

#includefastcgi_params;

#}

#denyaccessto.htaccessfiles,ifApache'sdocumentroot

#concurswithnginx'sone

#

#location~/\.ht{

#denyall;

#}

}

#anothervirtualhostusingmixofIP-,name-,andport-basedconfiguration

#

#server{

#listen8000;

#listensomename:8080;

#server_namesomenamealiasanother.alias;

#location/{

#roothtml;

#indexindex.htmlindex.htm;

#}

#}

#HTTPSserver

#

#server{

#listen443ssl;

#server_namelocalhost;

#ssl_certificatecert.pem;

#ssl_certificate_keycert.key;

#ssl_session_cacheshared:SSL:1m;

#ssl_session_timeout5m;

#ssl_ciphersHIGH:!aNULL:!MD5;

#ssl_prefer_server_cipherson;

#location/{

#roothtml;

#indexindex.htmlindex.htm;

#}

#}

}

4、实现Nginx下的反向代理

「做一个反向代理:」

表示的是如果你访问的后缀是 .jpg结尾的话,那么就访问下面的另外的服务器

location~\.jpg${

proxy_passhttp://10.7.182.110:8080;

}

5、实现Nginx下的负载均衡

「第一种策略:默认是轮循的策略:」

配置upstream

upstreamqianyu{

server10.7.182.110:8080;

server10.7.182.87:8080;

}

配置负载均衡

location~\.jpg${

proxy_passhttp://qianyu;

}

「第二种策略:权重(weight):」

#负载均衡的配置

upstreamqianyu{

server10.7.182.110:8080weight=2;

server10.7.182.87:8080weight=1;

}

配置负载均衡

location~\.jpg${

proxy_passhttp://qianyu;

}

「第三种策略:IPHash的使用:」

#负载均衡的配置

upstreamqianyu{

ip_hash;

server10.7.182.110:8080;

server10.7.182.87:8080;

}

配置负载均衡

location~\.jpg${

proxy_passhttp://qianyu;

}

6、实现Nginx下的动静分离

「动静分离:」

简单的来说就是将动态资源和静态资源给分隔开

静态资源放到Nginx服务器上

动态资源放到Tomcat服务器上

Jpghtmlcsspnggif....静态资源---->放到Nginx服务器上

.action结尾的都是动态的资源------------------------->放到Tomcat的服务器上

「动静分离的实现:」

在/usr/local目录下创建webapp文件夹

在webapp目录下创建css、html、js、img文件夹

编写HTML的内容并将html文件放到webapp目录下

 

 

 

 

 

 

<scriptsrc="/js/main.js"type="text/javascript"charset="utf-8"></script>

 

 

 

 

 

 

 

将图片放到img目录下,将css放到css目录下,将js文件放到js的目录下

编写动态资源的这个工程

packagecom.qy.servlet;

importjava.io.IOException;

importjava.io.PrintWriter;

importjavax.servlet.ServletException;

importjavax.servlet.http.HttpServlet;

importjavax.servlet.http.HttpServletRequest;

importjavax.servlet.http.HttpServletResponse;

publicclassqianyuServletextendsHttpServlet{

publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)

throwsServletException,IOException{

this.doPost(request,response);

}

publicvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)

throwsServletException,IOException{

response.setContentType("text/html;charset=utf-8");

PrintWriterwriter=response.getWriter();

writer.write("thisisdynamicresourcetest");

writer.flush();

writer.close();

}

}

编写配置文件 /conf/nginx.xml文件

#虚拟一个动静分离的机器

server{

listen9999;

server_namelocalhost;

#表示的是动态资源访问的机器

location/{

proxy_passhttp://10.7.182.54:8080;

}

#表示的是非css和js文件访问的地址

location~.*\.(htm|html|gif|jpg|jpeg|png|bmp|swf|ioc|rar|zip|txt|flv|mid|doc|ppt|pdf|xls|mp3|wma)$

{

root/usr/local/webapp;

expires30d;

}

#表示的是css和js的访问地址

location~.*\.(js|css)?$

{

root/usr/local/webapp;

expires1h;

测试

7、虚拟主机

「虚拟主机配置:」

server{

listen90;

server_namelocalhost;

location/{

rootqianyu;

indexqianyu.html;

}

#做一个反向代理

#表示的是如果你访问的后缀是.jpg结尾的话那么就访问下面的另外的服务器

location~\.jpg${

proxy_passhttp://10.7.182.110:8080;

}

}

关键词:Nginx 原理

最近更新