💖对Nginx的企业级理解,附阿里云实战💖

简介: Nginx 安装目录下,其默认的配置文件都放在这个目录的 conf 目录下,而主配置文件nginx.conf 也在其中,后续对 Nginx 的使用基本上都是对此配置文件进行相应的修改。

1.JPG


三、Nginx 常用的命令和配置文件


3.1、Nginx常用命令


3.1.1、启动命令


# 在Nginx的sbin目录下执行
./nginx
复制代码


3.1.2、关闭命令


# 在Nginx的sbin目录下执行
./nginx -s stop
复制代码


3.1.3、重启Nginx


# 在Nginx的sbin目录下执行
/nginx -s reload
复制代码


3.2、Nginx的配置文件


   Nginx 安装目录下,其默认的配置文件都放在这个目录的 conf 目录下,而主配置文件nginx.conf 也在其中,后续对 Nginx 的使用基本上都是对此配置文件进行相应的修改。


2.JPG

 

配置文件中有很多#, 开头的表示注释内容。


#user  nobody;
#开启进程数 <=CPU数 
worker_processes  1;
#错误日志保存位置
#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;
#进程号保存文件
#pid        logs/nginx.pid;
#每个进程最大连接数(最大连接=连接数x进程数)每个worker允许同时产生多少个链接,默认1024
events {
    worker_connections  1024;
}
http {
  #文件扩展名与文件类型映射表
    include       mime.types;
  #默认文件类型
    default_type  application/octet-stream;
  #日志文件输出格式 这个位置相于全局设置
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';
  #请求日志保存位置
    #access_log  logs/access.log  main;
  #打开发送文件
    sendfile        on;
    #tcp_nopush     on;
    #keepalive_timeout  0;
  #连接超时时间
    keepalive_timeout  65;
  #打开gzip压缩
    #gzip  on;
  #设定请求缓冲
  #client_header_buffer_size 1k;
  #large_client_header_buffers 4 4k;
  #设定负载均衡的服务器列表
  #upstream myproject {
    #weigth参数表示权值,权值越高被分配到的几率越大
    #max_fails 当有#max_fails个请求失败,就表示后端的服务器不可用,默认为1,将其设置为0可以关闭检查
    #fail_timeout 在以后的#fail_timeout时间内nginx不会再把请求发往已检查出标记为不可用的服务器
  #}
    #webapp
    #upstream myapp {   
    # server 192.168.122.133:8080 weight=1 max_fails=2 fail_timeout=30s;   
  # server 192.168.122.134:8080 weight=1 max_fails=2 fail_timeout=30s;   
    #} 
    #配置虚拟主机,基于域名、ip和端口
    server {
    #监听端口
        listen       80;
    #监听域名
        server_name  localhost;
        #charset koi8-r;
    #nginx访问日志放在logs/host.access.log下,并且使用main格式(还可以自定义格式)
        #access_log  logs/host.access.log  main;
    #返回的相应文件地址   
        location / {
            #设置客户端真实ip地址
            #proxy_set_header X-real-ip $remote_addr;   
      #负载均衡反向代理
      #proxy_pass http://myapp;
      #返回根路径地址(相对路径:相对于/usr/local/nginx/)
            root   html;
      #默认访问文件
            index  index.html index.htm;
        }
    #配置反向代理tomcat服务器:拦截.jsp结尾的请求转向到tomcat
        #location ~ \.jsp$ {
        #    proxy_pass http://192.168.122.133:8080;
        #}    
        #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 ~ \.php$ {
        #    proxy_pass   http://127.0.0.1;
        #}
        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        #
        #location ~ \.php$ {
        #    root           html;
        #    fastcgi_pass   127.0.0.1:9000;
        #    fastcgi_index  index.php;
        #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
        #    include        fastcgi_params;
        #}
        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        #
        #location ~ /\.ht {
        #    deny  all;
        #}
    }
  #虚拟主机配置:
  server {
    listen 1234;
    server_name wolfcode.cn;
    location / {
    #正则表达式匹配uri方式:在/usr/local/nginx/wolfcode.cn下 建立一个test123.html 然后使用正则匹配
    #location ~ test {
      ## 重写语法:if return (条件 = ~ ~*)
      #if ($remote_addr = 192.168.122.1) {
      #       return 401;
      #}    
      #if ($http_user_agent ~* firefox) {
      #    rewrite ^.*$ /firefox.html;
      #    break;
      #}      
      root wolfcode.cn;
      index index.html;
    }
    #location /goods {
    #   rewrite "goods-(\d{1,5})\.html" /goods-ctrl.html;
    #   root wolfcode.cn;
    #   index index.html;
    #}
    #配置访问日志
    access_log logs/wolfcode.cn.access.log main;
  }
    # another virtual host using mix of IP-, name-, and port-based configuration
    #
    #server {
    #    listen       8000;
    #    listen       somename:8080;
    #    server_name  somename  alias  another.alias;
    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}
    # HTTPS server
    #
    #server {
    #    listen       443 ssl;
    #    server_name  localhost;
    #    ssl_certificate      cert.pem;
    #    ssl_certificate_key  cert.key;
    #    ssl_session_cache    shared:SSL:1m;
    #    ssl_session_timeout  5m;
    #    ssl_ciphers  HIGH:!aNULL:!MD5;
    #    ssl_prefer_server_ciphers  on;
    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}
}
复制代码

 

  我们去掉所有以 # 开头的段落,精简之后的内容如下:


...              #全局块
events {         #events块
   ...
}
http      #http块
{
    ...   #http全局块
    server        #server块
    { 
        ...       #server全局块
        location [PATTERN]   #location块
        {
            ...
        }
        location [PATTERN] 
        {
            ...
        }
    }
    server
    {
      ...
    }
    ...     #http全局块
}
复制代码


3.2.1、全局块


   从配置文件开始到 events 块之间的内容,主要会设置一些影响 nginx 服务器整体运行的配置指令,主要包括配置运行 Nginx 服务器的用户(组)、允许生成的 worker process 数,进程 PID 存放路径、日志存放路径和类型以及配置文件的引入等。


   比如第一行的worker_processes 1;,这是 Nginx 服务器并发处理服务的关键配置,worker_processes 值越大,可以支持的并发处理量也越多,但是会受到硬件、软件等设备的制约


3.2.2、events块


   events 块涉及的指令主要影响 Nginx 服务器与用户的网络连接,常用的设置包括是否开启对多 work process下的网络连接进行序列化,是否允许同时接收多个网络连接,选取哪种事件驱动模型来处理连接请求,每个 word process 可以同时支持的最大连接数等。


   比如下面这段配置,就表示每个 work process 支持的最大连接数为 1024,这部分的配置对 Nginx 的性能影响较大,在实际中应该灵活配置。


events {
    worker_connections  1024;
}
复制代码


3.2.3、http块


   这算是 Nginx 服务器配置中最频繁的部分,代理、缓存和日志定义等绝大多数功能和第三方模块的配置都在这里。


   可以嵌套多个server,配置代理,缓存,日志定义等绝大多数功能和第三方模块的配置。如文件引入,mime-type定义,日志自定义,是否使用sendfile传输文件,连接超时时间,单连接请求数等。


   http 块也可以包括 http 全局块、server 块。


3.2.3.1、http全局块


   http 全局块配置的指令包括文件引入、MIME-TYPE 定义、日志自定义、连接超时时间、单链接请求数上限等。


3.2.3.2、server块


   这块和虚拟主机有密切关系,虚拟主机从用户角度看,和一台独立的硬件主机是完全一样的,该技术的产生是为了节省互联网服务器硬件成本。


   每个 http 块可以包括多个 server 块,而每个 server 块就相当于一个虚拟主机,而每个 server 块也分为全局 server 块,以及可以同时包含多个 locaton 块。


server {
        listen    80;
        server_name  localhost;
        location / {
            root   html;
            index  index.html index.htm;
        }
}
复制代码

3.2.3.2.1、全局server块


   最常见的配置是本虚拟机主机的监听配置和本虚拟主机的名称或 IP 配置


3.2.3.2.2、location块


   一个 server 块可以配置多个 location 块。这块的主要作用是基于 Nginx 服务器接收到的请求字符串(例如 server_name/uri-string),对虚拟主机名称(也可以是 IP 别名)之外的字符串(例如 前面的 /uri-string)进行匹配,对特定的请求进行处理。地址定向、数据缓存和应答控制等功能,还有许多第三方模块的配置也在这里进行。


3.2.4、location配置


   location支持多种语法规则:


  1. = 开头表示精确匹配。
  2. ^~ 开头表示uri以某个常规字符串开头,理解为匹配 url路径即可。
  3. ~ 开头表示区分大小写的正则匹配。
  4. ~* 开头表示不区分大小写的正则匹配。
  5. !~!~*分别为区分大小写不匹配及不区分大小写不匹配 的正则。
  6. / 通用匹配,任何请求都会匹配到。


   既然有多种匹配规则,那么就肯定是有匹配的顺序:首先匹配 =,其次匹配^~, 其次是按文件中顺序的正则匹配,最后是交给 / 通用匹配。当有匹配成功时候,停止匹配,按当前匹配规则处理请求。


3.3、Nginx服务的信号控制


  Nginx之所以有高性能,其实也和它的架构模式有关。Nginx默认采用的是多进程的方式来工作的,当将Nginx启动后,我们通过 ps -ef | grep nginx命令可以查看。


3.JPG

 

Nginx后台进程中包含一个master进程和多个worker进程,master进程主要用来管理worker进程,包含接收外界的信息,并将接收到的信号发送给各个worker进程,监控worker进程的状态,当worker进程出现异常退出后,会自动重新启动新的worker进程。而worker进程则是专门用来处理用户请求的,各个worker进程之间是平等的并且相互独立,处理请求的机会也是一样的。


4.JPG


四、Nginx实现反向代理


   使用 nginx 反向代理,根据访问的路径跳转到不同端口的服务中。nginx 监听端口为 9001,实现下面的效果:


  1. 访问 http://127.0.0.1:9001/edu/ 直接跳转到 127.0.0.1:8081
  2. 访问 http://127.0.0.1:9001/vod/ 直接跳转到 127.0.0.1:8082


准备两个 tomcat,一个 8001 端口,一个 8002 端口,并准备好测试的页面

修改 nginx 的配置文件,在 http 块中添加 server{}

server {
  listen 9001;
  server_name localhost;
  location ~ /edu/ {
    proxy_pass http://localhost:8001;
  }
  location ~ /vod/ {
    proxy_pass http://localhost:8002;
  }
}
复制代码


五、Nginx实现负载均衡


5.1、负载均衡简介


   随着互联网信息的爆炸性增长,负载均衡(load balance)已经不再是一个很陌生的话题,顾名思义,负载均衡即是将负载分摊到不同的服务单元,既保证服务的可用性,又保证响应足够快,给用户很好的体验。


   快速增长的访问量和数据流量催生了各式各样的负载均衡产品,很多专业的负载均衡硬件提供了很好的功能,但却价格不菲,这使得负载均衡软件大受欢迎,nginx 就是其中的一个,在 linux 下有 Nginx、LVS、Haproxy 等等服务可以提供负载均衡服务


5.2、在nginx.conf进行配置


http{
  upstream myserver{
    ip_hash;
    server 192.168.10.1:80880 weight=1;
    server 192.168.10.2:80880 weight=1;
  }
  server{
    location /{
      # 这里http后面名字要和上面的upstream后面的一样
      proxy_pass http://myserver;
      proxy_connect<timeout 10;
    }
  }
}
复制代码


5.3、负载均衡策略


   Nginx 提供了几种分配方式(策略):


  1. 轮询(默认):每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器 down 掉,能自动剔除。
  2. weight:代表权重,权重默认为1,权重越高,被分配的客户端就越多。
  3. ip_hash:每个请求按访问 ip 的 hash 结果分配,这样每个访客固定访问一个后端服务器,可以解决 session 的问题。
  4. 随机


六、Nginx实现动静分离

6.1、概述


   Nginx 动静分离简单来说就是把动态跟静态请求分开,不能理解成只是单纯的把动态页面和静态页面物理分离。严格意义上说应该是动态请求跟静态请求分开,可以理解成使用 Nginx处理静态页面,Tomcat 处理动态页面。动静分离从目前实现角度来讲大致分为两种:


  1. 纯粹把静态文件独立成单独的域名,放在独立的服务器上,也是目前主流推崇的方案。
  2. 动态跟静态文件混合在一起发布,通过 nginx 来分开。


6.2、配置文件配置


在配置文件方面,重点是配置location。


location /www/ {
    root /data/;
    index index.html index.html;
  }
  location /image/ {
    root /data/;
    autoindex on;
  }
复制代码

 

最后检查 Nginx 配置是否正确即可,然后测试动静分离是否成功,之需要删除后端tomcat服务器上的某个静态文件,查看是否能访问,如果可以访问说明静态资源 nginx 直接返回了,不走后端 tomcat 服务器。

相关实践学习
部署高可用架构
本场景主要介绍如何使用云服务器ECS、负载均衡SLB、云数据库RDS和数据传输服务产品来部署多可用区高可用架构。
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
相关文章
|
28天前
|
弹性计算 大数据 数据处理
阿里云服务器实例哪些属于入门级,哪些是企业级?有何区别?
阿里云服务器的实例规格从级别上来说分为入门级和企业级,从实例规格种类上来说,又分为突发性能型、共享型、计算型、通用型、内存型、大数据型等,2024年截止目前在阿里云的活动中,可选的云服务器实例规格有轻量应用服务器、经济型e、通用算力型u1、计算型c7、计算型c7a、计算型c8a、计算型c8y、通用型g7、通用型g7a、通用型g8a、通用型g8i、通用型g8y、内存型r7、内存型r8y等,有的新手用户不是很清楚2024年阿里云活动中的云服务器实例哪些属于入门级,哪些是企业级?有何区别?下面根据官方的各种资料介绍为大家解答下这些疑问,帮助您能更清楚地了解阿里云服务器,快速找到自己对云服务器产品的需
阿里云服务器实例哪些属于入门级,哪些是企业级?有何区别?
|
8天前
|
网络协议 安全 应用服务中间件
阿里云申请免费ssl证书并配置nginx
阿里云申请免费ssl证书并配置nginx
|
8天前
|
网络协议 安全 应用服务中间件
阿里云 网站https设置 sll申请与nginx跳转配置
阿里云 网站https设置 sll申请与nginx跳转配置
|
12天前
|
存储 固态存储 安全
租用阿里云企业级云服务器最新收费标准与活动价格参考
租用阿里云企业级云服务器多少钱?阿里云服务器有多种实例分类,其中通用型、计算型、内存型、通用算力型、大数据型、本地SSD、高主频型和增强型均属于企业级云服务器,目前在阿里云的活动中,通用型、计算型、内存型和通用算力型均有优惠,下面是阿里云企业级云服务器价格表,包含最新收费标准与活动价格,以表格形式展示给大家,以供参考和了解。
租用阿里云企业级云服务器最新收费标准与活动价格参考
|
18天前
|
弹性计算 监控 数据库
【阿里云弹性计算】企业级应用上云实战:基于阿里云 ECS 的 ERP 系统迁移案例
【5月更文挑战第25天】制造企业将面临资源不足、维护成本高和数据安全问题的ERP系统迁移到阿里云ECS,实现业务上云。通过数据迁移、应用部署、网络配置和性能优化等步骤,企业享受到弹性计算资源、高可靠性和数据安全优势,降低维护成本。阿里云提供24小时支持,助力企业数字化转型。此案例展示企业级应用上云的可行性,鼓励更多企业借助云计算实现创新发展。
34 0
|
19天前
|
弹性计算 缓存 负载均衡
【阿里云弹性计算】游戏服务器部署实战:利用阿里云ECS打造低延迟游戏环境
【5月更文挑战第24天】使用阿里云ECS打造低延迟游戏环境的实战指南,包括选择高性能处理器和SSD存储的实例,规划架构,选择近玩家的地域和可用区,部署软件,优化性能及监控。通过负载均衡、自动扩展和数据缓存提升体验,同时关注数据安全与网络安全。
197 4
|
19天前
|
运维 Cloud Native 持续交付
【阿里云云原生专栏】从零到一搭建云原生应用:阿里云云原生应用平台实战教程
【5月更文挑战第24天】本文档是一份阿里云云原生应用平台的实战教程,介绍了如何从零开始搭建云原生应用。内容涵盖云原生应用的特点(容器化、微服务、CI/CD和自动化运维)以及阿里云提供的服务,如容器服务、服务网格和CI/CD工具。教程详细讲解了创建容器集群、编写Dockerfile、构建镜像、部署应用、配置服务网格和设置CI/CD的步骤。通过本文,读者将学会利用阿里云平台开发和管理云原生应用。
288 0
|
21天前
|
SQL 关系型数据库 数据库
阿里云数据库 RDS SQL Server版实战【性能优化实践、优点探析】
本文探讨了Amazon RDS SQL Server版在云数据库中的优势,包括高可用性、可扩展性、管理便捷、安全性和成本效益。通过多可用区部署和自动备份,RDS确保数据安全和持久性,并支持自动扩展以适应流量波动。可视化管理界面简化了监控和操作,而数据加密和访问控制等功能保障了安全性。此外,弹性计费模式降低了运维成本。实战应用显示,RDS SQL Server版能有效助力企业在促销高峰期稳定系统并保障数据安全。阿里云的RDS SQL Server版还提供了弹性伸缩、自动备份恢复、安全性和高可用性功能,进一步优化性能和成本控制,并与AWS生态系统无缝集成,支持多种开发语言和框架。
82 2
|
22天前
|
弹性计算 监控 负载均衡
【阿里云弹性计算】ECS实例迁移实战:无缝迁移到阿里云的步骤与技巧
【5月更文挑战第22天】阿里云ECS实例迁移实战详解,涵盖无缝迁移步骤与技巧:选择合适迁移方案,如VPC或使用阿里云工具;创建目标环境,数据迁移及配置同步;测试验证功能正常,流量切换;选择低峰期,保证数据一致,实时监控,提升迁移成功率。本文为云平台迁移提供实用指南。
60 2
|
23天前
|
存储 弹性计算 监控
【阿里云弹性计算】成本优化实战:利用阿里云 ECS 抢占式实例节省云支出
【5月更文挑战第21天】阿里云ECS的抢占式实例提供了一种成本优化策略,适合对中断容忍度较高的业务。通过创建和管理抢占式实例,结合API查询价格信息,企业能节省大量成本。使用时注意业务容错性,设置监控系统应对中断,结合其他成本优化措施,如存储类型选择和网络配置优化。确保业务可恢复性,关注阿里云政策,并根据业务变化调整策略,以实现成本与效益的最佳平衡。
64 3