认识Nginx 什么是Nginx
Nginx 同 Apache 一样都是一种 Web 服务器。基于 REST 架构风格,以统一资源描述符(Uniform Resources Identifier)URI 或者统一资源定位符(Uniform Resources Locator)URL 作为沟通依据,通过 HTTP 协议提供各种网络服务。
使用Nginx的原因
(来自https://www.wajsw.com/blog/1263.html)
- 作为Web服务器:Nginx特别受Web托管服务提供商的欢迎,因为它使用更少的资源,支持更多的并发连接,并且比Apache更有效。Nginx充当负载平衡服务器:Nginx可以在内部直接支持Rails和PHP程序,也可以作为HTTP代理服务器。
- Nginx配置简单,Apache很复杂,Nginx特别容易启动,即使运行几个月,它也可以不间断地完成7 * 24。您也可以不间断地升级软件版本。 Nginx的静态处理性能比Apache高出3倍多。 Apache对PHP的支持相对简单。 Nginx需要与其他后端一起使用。 Apache拥有比Nginx更多的组件。
- Apache 是同步多进程模型,一个连接对应一个进程;Nginx 是异步的,多个连接(万级别)可以对应一个进程。
- Nginx的优点是它处理静态请求,cpu内存使用率低,Apache适合处理动态请求,所以现在一般前端使用Nginx作为反向代理来抵御压力,而Apache作为后端处理动态要求。
和Apache的比较
(来自https://www.wajsw.com/blog/1263.html)
Nginx 相对 Apache 的优点
- 轻量级,同样起 web 服务,比 Apache 占用更少的内存及资源
- 反并发,Nginx处理异步非阻塞请求,而Apache则阻塞。在高并发性下,Nginx保持低资源,低成本和高性能。
- 高度模块化的设计,编写模块相对简单
- 社区活跃,各种高性能模块出品迅速啊
Apache 相对 Nginx 的优点
- rewrite,比 Nginx 的 rewrite 强大
- 模块超多,基本想到的都可以找到
- 少 bug,Nginx 的 bug 相对较多
- 超稳定
通常,存在是使用Nginx需要性能的Web服务的原因。如果你不需要性能而只想要稳定性,那么Apache。后者的各种功能模块比前者更好地实现,例如,ssl模块比前者更好,并且有许多可配置项。
Nginx常用的功能
- 反向代理
- 负载均衡
- 动态静态请求的分离
本文转自 https://www.cnblogs.com/reclusiveone/p/14722296.html,如有侵权,请联系删除。
Nginx 反向代理配置 正向代理和反向代理
(来自https://www.cnblogs.com/puls/p/8634505.html)
-
正向代理
正向代理是一个位于客户端和原始服务器(origin server)之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端。客户端必须要进行一些特别的设置才能使用正向代理。
举例:
在公司中,A的电脑开通了访问数据库的防火墙,B的电脑并没有开通.B如何去访问数据库?我们可以在A的电脑上使用代理工具,配置好IP和端口,然后B通过连接A的IP/端口,A代替B来连接数据库.A就相当于一个代理.
-
反向代理
反向代理(Reverse Proxy)方式是指以代理服务器来接受Internet上的连接请求,然后将请求转发给内部网络上的服务器;并将从服务器上得到的结果返回给Internet上请求连接的客户端,此时代理服务器对外就表现为一个服务器。
反向代理隐藏了真正的服务端,就像你每天使用百度的时候,只知道敲打www.baidu.com就可以打开百度搜索页面,但背后成千上万台百度服务器具体是哪一台为我们服务的,我们并不知道。我们只知道这个代理服务器,它会把我们的请求转发到真实为我们服务的那台服务器那里去。
软件层面一般常用Nginx来做反向代理服务器,它的性能非常好,用来做负载均衡。
反向代理配置
使用tomcat作为服务器,先执行tomcat的配置和启动.
启动服务后,能够正常访问三个端口,看到三只tomcat.
然后对nginx配置反向代理.
这里我在另外目录下增加了一个配置文件,在nginx原本配置文件中引用它.
include path/*.conf;
引用的配置文件中的内容:
server {
listen [info]10612[/info];
#server\_name api.service.com;
#图片路径拦截,定位到图片静态资源
location ~ /upload/.*$ {
root /www/resources/;
expires 30d;
}
location / {
#跳转到指点tomcat服务器
proxy\_pass http://localhost:10611;
proxy\_set\_header Host $host;
proxy\_set\_header X-Real-IP $remote\_addr;
proxy\_set\_header REMOTE-HOST $remote\_addr;
proxy\_set\_header X-Forwarded-For $proxy\_add\_x\_forwarded\_for;
}
}
server {
listen [success]10623[/success];
#server\_name api.service.com;
#图片路径拦截,定位到图片静态资源
location ~ /upload/.*$ {
root /www/resources/;
expires 30d;
}
location / {
#跳转到指点tomcat服务器
proxy\_pass http://localhost:10622;
proxy\_set\_header Host $host;
proxy\_set\_header X-Real-IP $remote\_addr;
proxy\_set\_header REMOTE-HOST $remote\_addr;
proxy\_set\_header X-Forwarded-For $proxy\_add\_x\_forwarded\_for;
}
}
server {
listen [success]10634[/success];
#server\_name api.service.com;
#图片路径拦截,定位到图片静态资源
location ~ /upload/.*$ {
root /www/resources/;
expires 30d;
}
location / {
#跳转到指点tomcat服务器
proxy\_pass http://localhost:10633;
proxy\_set\_header Host $host;
proxy\_set\_header X-Real-IP $remote\_addr;
proxy\_set\_header REMOTE-HOST $remote\_addr;
proxy\_set\_header X-Forwarded-For $proxy\_add\_x\_forwarded\_for;
}
}
重启nginx,可以通过访问监听的端口,从而访问被代理的服务器地址
本文转自 https://www.cnblogs.com/reclusiveone/p/14722386.html,如有侵权,请联系删除。
Nginx 负载均衡及配置
[info]Nginx负载均衡的方式[/info]
- 备份
- 轮询
- 权重
- IP Hash
- URL Hash
- 性能
- 最少连接数
[infobox title="备份"]
upstream mysvr {
server 127.0.0.1:8080;
server 192.168.10.12:8081 backup;
}
正常会访问第一个地址.只有第一个地址访问出现了问题,才会去第二个地址请求.
[/infobox]
[infobox title="轮询"]
upstream loop{
server 127.0.0.1:8080;
server 127.0.0.1:7080;
server 127.0.0.1:6305;
}
这种相当于权重都为1的权重配置.按照顺序将客户端的请求发送给不同服务器.
[/infobox ]
[infobox title="权重"]
upstream weight{
server 127.0.0.1:8080 weight = 5;
server 127.0.0.2:7080 weight = 5;
server 127.0.0.3:6305 weight = 10;
}
这种考虑到不同服务器的性能不一样,按照能者多劳的方式,权重大的,会处理更多的请求.
[/infobox]
[infobox title="IP Hash"]
upstream ipHash{
ip\_hash;
server 127.0.0.1:8080;
server 127.0.0.2:8080;
server 127.0.0.3:8080;
}
根据请求IP的Hash值去将请求转发给相应的服务器.
这样的话,同一个IP在多次访问的时候,如果被代理的服务器没有问题,就一定会访问同一个服务器.
这种方式适合有状态服务.
[/infobox]
[infobox title="URL Hash"]
upstream dynamic\_zuoyu {
hash $request\_uri;
server localhost:8080;
server localhost:8081;
server localhost:8082;
server localhost:8083;
}
相同的URL会被定位到同一个服务器
[/infobox]
[infobox title="性能"]
upstream dynamic\_zuoyu {
server localhost:8080;
server localhost:8081;
server localhost:8082;
server localhost:8083;
fair;
}
这个是根据服务器响应时间长短去分配请求的.响应时间越快,分配的请求越多.
[/infobox]
[infobox title="最少连接数"]
upstream dynamic\_zuoyu {
least\_conn;
server localhost:8080;
server localhost:8081;
server localhost:8082;
server localhost:8083;
}
优先将请求分配给连接数少的服务器.
[/infobox]
本文转自 https://www.cnblogs.com/reclusiveone/p/14722408.html,如有侵权,请联系删除。
Nginx 动静请求分离
Nginx动态静态请求的分离通过conf配置文件实现.
Nginx 配置文件(来自菜鸟教程):
server {
listen 80;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
root html;
index index.html index.htm;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
可以配置不同的location匹配规则,将请求转发到不同的服务器.
例如:
location ~ .php$ {
proxy_pass http://127.0.0.1;
}
location ~ .(jsp|do)$ {
proxy_pass http://127.0.0.2;
}
location ~ .(jpg|png|gif)$ {
proxy_pass http://127.0.0.3;
}
.php的请求,转发到127.0.0.1去处理
.jsp,.do的请求,转发到127.0.0.2去处理
.jpg,.png,.gif的请求,抓发到127.0.0.3去处理
本文转自 https://www.cnblogs.com/reclusiveone/p/14722419.html,如有侵权,请联系删除。