快速入门Nginx

这篇具有很好参考价值的文章主要介绍了快速入门Nginx。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1. 简 介

Nginx 是一个高性能的 HTTP 和反向代理 web 服务器,同时也提供了 IMAP/POP3/SMTP 服务。

其特点是占有内存少,并发能力强(能支持 50000 个并发连接数的响应),国内大多数互联网企业都有使用它。

它也是一个安装非常简单、配置文件非常简洁(还能够支持 perl 语法)、Bug非常少的服务,启动特别容易,并且几乎可以做到 7*24 不间断运行,即使运行数个月也不需要重新启动。

2. 作 用

Nginx 的作用主要有三个,一个是反向代理,一个是负载均衡,最后一个是动静分离

2.1 反向代理

反向代理

快速入门Nginx,Nginx,nginx,服务器

反向代理,本质是代理,也可以理解为中介或者中间商,只不过是反向的,表示代理的是服务端。

这和租房的例子有点类似,租客可以理解为客户端,房屋中介可以理解为中间代理,真正的房东可以理解为服务端。

房屋中介手上有很多房源,与多个房东有合作关系,租客无法直接找到房东租房子,只能通过房屋中介去租,那这时房屋中介就成了各个房东的代理人,从租客的角度来看,这就是一个反向代理。

反向代理的特点:客户端无法知道真正为自己提供服务的是哪里的哪一台服务器

正向代理

快速入门Nginx,Nginx,nginx,服务器

既然有反向代理,那自然有正向代理。

反向代理,代理的是服务端,而正向代理,正好相反,代理的是客户端。

举个例子,比如在你的个人电脑上,挂上一个 VPN,访问外网访问谷歌,这就是一个正向代理的示例。你的个人电脑,由于某些原因,本身无法访问外网,但通过代理就可以访问到外网的内容。

正向代理的特点:服务端无法知道真正访问自己的是哪里的哪一个客户端

2.2 负载均衡

负载均衡:英文名称为 Load Balance,可以理解为一种负载的处理方式,其含义就是指将负载(工作任务)进行平衡、分摊到多个操作单元上进行运行,避免单一服务器承受压力太大,产生过载情况,同时也是为了优化资源使用,提高响应速度。

Nginx 提供的负载均衡策略分为:内置策略和扩展策略

2.2.1 内置策略

轮询

轮询策略:按一定的顺序,循环将请求分发给服务器进行处理,如下面的分发,自上往下给每个服务器依次分发请求。
快速入门Nginx,Nginx,nginx,服务器
加权轮询

加权轮询:根据每个服务器分配的权重,循环分配请求进行处理,权重越高表示该服务器的处理能力越强,可以承担的请求数量越多。

快速入门Nginx,Nginx,nginx,服务器

ip 哈希

ip 哈希策略:对客户端的 ip 进行 hash 操作,然后根据 hash 结果将同一个客户端 ip 的请求分发给同一台服务器进行处理,同时这一个策略可以解决 session 不共享的问题。
快速入门Nginx,Nginx,nginx,服务器

2.2.2 扩展策略

url 哈希

url 哈希与 ip 哈希类似,不同点在于 ip 哈希是对客户端 ip 进行哈希操作,而 url 哈希则是对客户端请求的 url 进行哈希操作。这一策略可以配合后端的缓存服务器使用,它能够提高缓存效率,同时解决 session 的问题。

fair

将前端请求分流到负载压力最小的后端节点上。Nginx 通过后端节点对请求的响应时间来判断负载情况,响应时间短的节点负载压力相对小,得出判断结果后,Nginx 就将前端请求分配到负载压力最小的节点上。

2.3 动静分离

在实际的开发中,有些请求是不需要后台处理就能直接展示的,比如一个网站上固定的一些图片、样式、页面恒定的信息等,都是死的,不需要动态展示,那这种就可以考虑单独部署在一个静态资源服务器上,将它们与后端应用的部署分离开,实现动静分离。

动静分离的好处:由于静态资源是死的,不会动态变化,因此可以根据这个特点,对需要用到静态资源的地方做缓存处理,提高响应速度,更快地展示页面信息。

快速入门Nginx,Nginx,nginx,服务器

3. 使 用

3.1 几个常见命令
# 先进入到 sbin 目录里面
cd /usr/local/nginx/sbin/

# 启动 nginx 命令
./nginx

# 停止 nginx 命令
./nginx -s stop

# 安全退出 nginx 命令
./nginx -s quit

# 重新加载 nginx 配置文件
./nginx -s reload

# 查看 nginx 进程
ps aux|grep nginx
3.2 认识配置文件

nginx 的配置文件,我们最常用的、可能也是最需要去改动的就是 nginx.conf 这个文件,它是做路由转发、负载均衡、端口监听等操作的配置所在地。

整个文件的内容,可以分为以下三大板块:

  • 全局块:用于配置工作进程数,定义日志路径
  • events 块:设置处理轮询事件模型,每个工作进程最大连接数及http层的keep-alive超时时间
  • http 块:路由匹配、静态文件服务器、反向代理、负载均衡等

其中,http 块,又可以再分为 http 全局块和 server 块;server 块它也可以再分,分为 server 全局块和 location 块。

一个 http 块中,可以有多个 server 块,而一个 server 块中,也可以有多个 location 块

用个图表示一下结构,大概就类似下面这样的:

快速入门Nginx,Nginx,nginx,服务器

下面是一个 nginx.conf 文件的内容,按照上面分块的方式去读它,可以发现整个文件的结构还是比较清晰的。

#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 4k; 设定请求缓冲,
     客户端请求头部的缓冲区大小。
     这个可以根据你的系统分页大小来设置,一般一个请求头的大小不会超过1k,
     不过由于一般系统分页都要大于1k,所以这里设置为分页大小。
     分页大小可以用命令getconf PAGESIZE 取得。
     [root@web001 ~]# getconf PAGESIZE
        4096
     但也有client_header_buffer_size超过4k的情况,但是client_header_buffer_size该值必须设置为“系统分页大小”的整倍数。
    #client_header_buffer_size 4k;
    #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      9000;
        #监听域名
        server_name  localhost;

        #charset koi8-r;

         #nginx访问日志放在logs/host.access.log下,并且使用main格式(还可以自定义格式)
        #access_log  logs/host.access.log  main;

          #返回的相应文件地址
        location / {
        
            #负载均衡反向代理
            #proxy_pass http://myapp;
            
            #返回根路径地址(相对路径:相对于/usr/local/nginx/)
            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 ~ \.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;
        #}
    }


    # 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;
    #    }
    #}

}
3.3 配置文件示例

下面是从其它地方找到的一个 nginx.conf 配置文件示例,记录并学习一下。

个人觉得,这个东西没有一个固定的配置模板,都是根据自己的业务需求去实现配置的,但配置的内容,无非还是端口、负载均衡、路由转发、连接数、超时限制、上传文件大小限制等玩意,刚开始用可能觉得有些麻烦,但当你对 nginx.conf 这个文件操作多了,自然就会觉得没啥了,正所谓熟能生巧。文章来源地址https://www.toymoban.com/news/detail-519261.html

# 全局块
 user www-data;
 worker_processes  2;  ## 默认1,一般建议设成CPU核数1-2倍
 error_log  logs/error.log; ## 错误日志路径
 pid  logs/nginx.pid; ## 进程id
 # Events块
 events {
   # 使用epoll的I/O 模型处理轮询事件。
   # 可以不设置,nginx会根据操作系统选择合适的模型
   use epoll;
   # 工作进程的最大连接数量, 默认1024个
   worker_connections  2048;
   # http层面的keep-alive超时时间
   keepalive_timeout 60;
   # 客户端请求头部的缓冲区大小
   client_header_buffer_size 2k;
 }
 # http块
 http { 
   include mime.types;  # 导入文件扩展名与文件类型映射表
   default_type application/octet-stream;  # 默认文件类型
   # 日志格式及access日志路径
   log_format   main '$remote_addr - $remote_user [$time_local]  $status '
     '"$request" $body_bytes_sent "$http_referer" '
     '"$http_user_agent" "$http_x_forwarded_for"';
   access_log   logs/access.log  main; 
   # 允许sendfile方式传输文件,默认为off。
   sendfile     on;
   tcp_nopush   on; # sendfile开启时才开启。
 
   # http server块
   # 简单反向代理
   server {
     listen       80;
     server_name  domain2.com www.domain2.com;
     access_log   logs/domain2.access.log  main;
     # 转发动态请求到web应用服务器
     location / {
       proxy_pass      http://127.0.0.1:8000;
       deny 192.24.40.8;  # 拒绝的ip
       allow 192.24.40.6; # 允许的ip   
     }
     # 错误页面
     error_page   500 502 503 504  /50x.html;
         location = /50x.html {
             root   html;
         }
   }
   # 负载均衡
   upstream backend_server {
     server 192.168.0.1:8000 weight=5; # weight越高,权重越大
     server 192.168.0.2:8000 weight=1;
     server 192.168.0.3:8000;
     server 192.168.0.4:8001 backup; # 热备
   }
   server {
     listen          80;
     server_name     big.server.com;
     access_log      logs/big.server.access.log main;
     charset utf-8;
     client_max_body_size 10M; # 限制用户上传文件大小,默认1M
     location / {
       # 使用proxy_pass转发请求到通过upstream定义的一组应用服务器
       proxy_pass      http://backend_server;
       proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
       proxy_set_header Host $http_host;
       proxy_redirect off;
       proxy_set_header X-Real-IP  $remote_addr;
     } 
   }
 }

到了这里,关于快速入门Nginx的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 分布式 - 服务器Nginx:一小时入门系列之HTTP反向代理

    1. 正向代理和反向代理 正向代理是 客户端 通过代理服务器访问互联网资源的方式。在这种情况下,客户端向代理服务器发送请求,代理服务器再向互联网上的服务器发送请求,获取资源并返回给客户端。正向代理的典型应用场景是翻墙,即通过代理服务器访问被封锁的网站

    2024年02月14日
    浏览(44)
  • 分布式 - 服务器Nginx:一小时入门系列之HTTPS协议配置

    1. HTTPS 协议 HTTPS 是一种通过计算机网络进行安全通信的协议。它是HTTP的安全版本,通过使用 SSL 或 TLS 协议来加密和保护数据传输。HTTPS的主要目的是确保在客户端和服务器之间传输的数据是加密的,以防止第三方窃听、篡改或伪装。它通过使用公钥加密和私钥解密的方式来

    2024年02月11日
    浏览(43)
  • 分布式 - 服务器Nginx:一小时入门系列之代理缓冲与缓存

    官方文档:https://nginx.org/en/docs/http/ngx_http_proxy_module.html 代理缓冲用于临时存储从后端服务器返回的响应数据。通过使用代理缓冲,Nginx可以在接收完整的响应后再将其发送给客户端,从而提高性能和效率。 ① 客户端往往是用户网络,情况复杂,可能出现网络不稳定,速度较

    2024年02月11日
    浏览(35)
  • 分布式 - 服务器Nginx:一小时入门系列之 HTTPS协议配置

    1. HTTPS 协议 HTTPS 是一种通过计算机网络进行安全通信的协议。它是HTTP的安全版本,通过使用 SSL 或 TLS 协议来加密和保护数据传输。HTTPS的主要目的是确保在客户端和服务器之间传输的数据是加密的,以防止第三方窃听、篡改或伪装。它通过使用公钥加密和私钥解密的方式来

    2024年02月11日
    浏览(41)
  • Nginx 入门指南:从入门到放弃(不是!)从零开始掌握高性能 Web 服务器

    Nginx 可以构建高性能、可靠的 Web 服务器。本文将带你了解 Nginx 的基本概念、安装方法以及常见配置,让你快速上手并搭建自己的 Web 服务器。 随着互联网的发展,构建稳定、高性能的 Web 服务器成为了许多开发者的重要需求。而在众多的服务器软件中, Nginx 以其出色的性能

    2024年04月15日
    浏览(50)
  • 分布式 - 服务器Nginx:一小时入门系列之TCP反向代理和负载均衡

    1. HTTP反向代理和TCP反向代理 Nginx可以作为HTTP反向代理和TCP反向代理。 HTTP反向代理是指Nginx作为Web服务器的代理服务器,接收客户端的HTTP请求,然后将请求转发给后端的Web服务器,最后将Web服务器的响应返回给客户端。这种方式可以实现负载均衡、缓存、SSL终止等功能。 T

    2024年02月11日
    浏览(41)
  • nginx 代理sftp,达到访问nginx服务器就间接访问sftp服务器

    测试环境部署规划: 192.168.0.101 nginx 服务器    192.168.0.102 sftp 服务器  192.168.0.103  作为客户端去访问,这里三台机器选用centos 7.9系统,客户端可以使用window,软件访问sftp服务! 首先 1.在192.168.0.101机器上部署nginx  步骤: #安装依赖 yum install gcc pcre-devel openssl-devel  wget -y 

    2024年02月16日
    浏览(55)
  • Nginx(7)Nginx实现服务器端集群搭建

    前面课程已经将Nginx的大部分内容进行了讲解,我们都知道了Nginx在高并发场景和处理静态资源是非常高性能的,但是在实际项目中除了静态资源还有就是后台业务代码模块,一般后台业务都会被部署在Tomcat,weblogic或者是websphere等web服务器上。那么如何使用Nginx接收用户的请

    2024年02月09日
    浏览(43)
  • Nginx做图片服务器

    前言 : Nginx是一个高性能的HTTP和反向代理web服务器,以及负载均衡器。根据nginx是高性能的http服务器,因此可以用作图片服务器使用。 本案例是在docker安装nginx来操作的。 Nginx是一款高性能的Web服务器和反向代理服务器,它可以处理数以千计的并发连接,并且具有出色的稳定

    2024年02月11日
    浏览(42)
  • Nginx缓存代理服务器

    1.nginx反向缓存代理服务配置 2. 安装nginx服务 3. 修改/etc/nginx/nginx.conf配置文件,关闭长连接保持功能 4. 修改/etc/nginx/nginx.conf配置文件,添加反向代理缓存配置项 5. 修改/etc/nginx/conf.d/default.conf配置文件,添加proxy转发模块 6.启动nginx服务

    2024年02月12日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包