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

本文涉及的产品
传统型负载均衡 CLB,每月750个小时 15LCU
日志服务 SLS,月写入数据量 50GB 1个月
网络型负载均衡 NLB,每月750个小时 15LCU
简介: 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 服务器。

相关实践学习
SLB负载均衡实践
本场景通过使用阿里云负载均衡 SLB 以及对负载均衡 SLB 后端服务器 ECS 的权重进行修改,快速解决服务器响应速度慢的问题
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
相关文章
|
1月前
|
存储 小程序 前端开发
【微信小程序 - 工作实战分享】1.微信小程序发送手机短信验证码(阿里云)
【微信小程序 - 工作实战分享】1.微信小程序发送手机短信验证码(阿里云)
63 0
|
1月前
|
存储 弹性计算 NoSQL
阿里云服务器企业级实例购买及变配常见问题及解答
阿里云服务器企业级实例具有高性能、稳定计算能力和平衡网络性能的特点,因为具有独享且稳定的计算、存储、网络资源,这些实例规格族非常适合对业务稳定性具有高要求的企业场景。企业级云服务器拥有完全的云服务器cpu、内存使用资源,不与他人共享云服务器资源。有些新手用户不知道什么是企业级实例与共享型实例有何区别,在使用过程中需要注意些什么,下面是小编整理的几个阿里云企业级云服务器实例常见问题及解答,以供大家了解。
阿里云服务器企业级实例购买及变配常见问题及解答
|
25天前
|
数据采集 人工智能 监控
阿里云百炼模型训练实战流程:从入门到实战应用
【7月更文第2天】阿里云百炼是AI大模型开发平台,提供一站式服务,涵盖模型训练到部署。用户从注册登录、创建应用开始,选择模型框架,配置资源。接着,进行数据准备、预处理,上传至阿里云OSS。模型训练涉及设置参数、启动训练及调优。训练后,模型导出并部署为API,集成到应用中。平台提供监控工具确保服务性能。通过百炼,开发者能高效地进行大模型实战,开启AI创新。
253 2
|
1月前
|
弹性计算 应用服务中间件 Linux
双剑合璧:在同一ECS服务器上共存Apache与Nginx的实战攻略
在ECS服务器上同时部署Apache和Nginx的实战:安装更新系统,Ubuntu用`sudo apt install apache2 nginx`,CentOS用`sudo yum install httpd nginx`。配置Nginx作为反向代理,处理静态内容及转发动态请求到Apache(监听8080端口)。调整Apache的`ports.conf`监听8080。重启服务测试,实现两者高效协同,提升Web服务性能。记得根据流量和需求优化配置。【6月更文挑战第21天】
188 1
|
1月前
|
安全 Ubuntu 应用服务中间件
NGINX环境下实现Web网站访问控制的实战指南
在NGINX中设置基于IP的访问控制可提升网站安全性。步骤包括安装NGINX、备份配置文件、编辑`/etc/nginx/sites-available/default`,添加`allow`和`deny`指令限制特定IP访问,如`allow 192.168.1.100; deny all;`,然后测试配置并重启服务。成功后,仅允许的IP能访问网站,否则会收到403错误。这为Web安全提供基础保障,还可扩展实现更多高级控制策略。【6月更文挑战第20天】
97 3
|
2月前
|
存储 固态存储 安全
租用阿里云企业级云服务器最新收费标准与活动价格参考
租用阿里云企业级云服务器多少钱?阿里云服务器有多种实例分类,其中通用型、计算型、内存型、通用算力型、大数据型、本地SSD、高主频型和增强型均属于企业级云服务器,目前在阿里云的活动中,通用型、计算型、内存型和通用算力型均有优惠,下面是阿里云企业级云服务器价格表,包含最新收费标准与活动价格,以表格形式展示给大家,以供参考和了解。
租用阿里云企业级云服务器最新收费标准与活动价格参考
|
1月前
|
监控 前端开发 应用服务中间件
前端开发者必备:Nginx入门实战宝典,从部署到优化一网打尽(2)
前端开发者必备:Nginx入门实战宝典,从部署到优化一网打尽
46 1
|
1月前
|
负载均衡 前端开发 应用服务中间件
前端开发者必备:Nginx入门实战宝典,从部署到优化一网打尽(1)
前端开发者必备:Nginx入门实战宝典,从部署到优化一网打尽
61 1
|
19天前
|
缓存 负载均衡 监控
Nginx性能调优5招35式不可不知的策略实战
以上 V 哥总结的5个方面关于 Nginx性能调优的策略,实际应用中需要结合实际项目的情况来测试,希望对你有帮助,欢迎关注威哥爱编程,技术路上我们一起成长。
|
29天前
|
API 开发工具 git
阿里云云效操作报错合集之如何解决云效连接企业级仓库时出现"no such host"的问题
本合集将整理呈现用户在使用过程中遇到的报错及其对应的解决办法,包括但不限于账户权限设置错误、项目配置不正确、代码提交冲突、构建任务执行失败、测试环境异常、需求流转阻塞等问题。阿里云云效是一站式企业级研发协同和DevOps平台,为企业提供从需求规划、开发、测试、发布到运维、运营的全流程端到端服务和工具支撑,致力于提升企业的研发效能和创新能力。

热门文章

最新文章