Nginx 基础介绍和常用场景

Posted HaSaKing_721

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Nginx 基础介绍和常用场景相关的知识,希望对你有一定的参考价值。


前言

nginx 同 Apache 一样都是一种 Web 服务器。基于 REST 架构风格,以统一资源描述符(Uniform Resources Identifier)URI 或者统一资源定位符(Uniform Resources Locator)URL 作为沟通依据,通过 HTTP 协议提供各种网络服务。

一、Nginx 有哪些优点

  • Nginx 使用基于事件驱动架构,使得其可以支持数以百万级别的 TCP 连接。
  • 高度的模块化和自由软件许可证使得第三方模块层出不穷(这是个开源的时代啊)。
  • Nginx 是一个跨平台服务器,可以运行在 Linux、Windows、FreeBSD、Solaris、AIX、Mac OS 等操作系统上。
  • Nginx 是一款自由的、开源的、高性能的 HTTP 服务器和反向代理服务器;同时也是一个 IMAP、POP3、SMTP 代理服务器。

二、正向代理

直接上图,方便理解

举个简单的例子:比如你需要访问某个部署在内网服务器,但条件有限,只能通过VPN访问内网,这就是正向代理

正向代理最大的特点是客户端非常明确要访问的服务器地址;服务器只清楚请求来自哪个代理服务器,而不清楚来自哪个具体的客户端;正向代理模式屏蔽或者隐藏了真实客户端信息。
在这里插入图片描述
正向代理,“它代理的是客户端”,是一个位于客户端和原始服务器(Origin Server)之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器)。

三、反向代理

直接上图,方便理解

一台服务器一个应用以及满足不了业务需求,需要把一个应用扩展成多个;客户端通过访问一个IP,实现负载均衡,也就是通过部署多台服务器来解决访问人数限制的问题。

这里扩展下 Tengine

在这里插入图片描述
客户端是无感知代理的存在的,反向代理对外都是透明的,访问者并不知道自己访问的是一个代理。因为客户端不需要任何配置就可以访问。

反向代理的作用:

  • 保证内网的安全,通常将反向代理作为公网访问地址,Web 服务器是内网。
  • 负载均衡,通过反向代理服务器来优化网站的负载。

四、常用场景

一、HTTP服务器

配置nginx.conf中的server

http {
    server {
        listen       80;
        server_name  localhost;
        client_max_body_size 1024M;

        # 默认location
        location / {
            root   /usr/local/var/html;# 本地html存放的路径
            index  index.html index.htm;
        }
    }
}

访问 http://localhost/test.html 指向 /usr/local/var/html/test.html

注意:如果访问图片出现403 Forbidden错误,可能是因为nginx.conf 的第一行user配置不对,默认是#user nobody;是注释的,linux下改成user root; macos下改成user 用户名 所在组; 然后重新加载配置文件或者重启,再试一下就可以了, 用户名可以通过who am i 命令来查看。

二、静态服务器

http {
    server {
        listen       80;
        server_name  localhost;


        set $doc_root /usr/local/var/www; # 申明 doc_root变量

        # 默认location
        location / {
            root   /usr/local/var/www/html;
            index  index.html index.htm;
        }

        location ^~ /images/ {
            root $doc_root;
       }

       location ~* \\.(gif|jpg|jpeg|png|bmp|ico|swf|css|js)$ {
           root $doc_root/img;
       }
    }
}

访问http://localhost/test.jpg 会映射到 $doc_root/img

三、反向代理

server {
    listen       80;
    server_name  localhost;

    location / {
        proxy_pass http://localhost:8081;
        proxy_set_header Host $host:$server_port;
        # 设置用户ip地址
         proxy_set_header X-Forwarded-For $remote_addr;
         # 当请求服务器出错去寻找其他服务器
         proxy_next_upstream error timeout invalid_header http_500 http_502 http_503; 
    }

}   

当我们访问 localhost 的时候,就相当于访问 localhost:8081了

四、负载均衡

upstream web_servers {  
   server localhost:8081 weight=1;  
   server localhost:8082 weight=3;  
   server localhost:8082 weight=4 backup;  
}

server {
    listen       80;
    server_name  localhost;
    #access_log  logs/host.access.log  main;


    location / {
        proxy_pass http://web_servers;
        # 必须指定Header Host
        proxy_set_header Host $host:$server_port;
    }
 }

访问地址 http://localhost/, 轮询访问 8081 和8082 端口

权重配置 weight=1 ,2

热备 backup

示例是4次请求只有一次被分配到8081上,其他3次分配到8082上。backup是指热备,只有当8081和8082都宕机的情况下才走8083

五、常用配置

Nginx 常用配置 超详细

以上是关于Nginx 基础介绍和常用场景的主要内容,如果未能解决你的问题,请参考以下文章

Nginx 基础介绍和常用场景

Nginx入门与基础之反向代理配置介绍

Nginx介绍及使用场景

redis常用数据结构介绍和业务应用场景分析

常用编程思想与算法

前端开发掌握nginx常用功能之rewrite