什么是Nginx

认识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常用的功能

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,如有侵权,请联系删除。

原文地址:https://www.cnblogs.com/hustshu/p/14815085.html