首页 > 系统相关 >Nginx

Nginx

时间:2023-03-12 23:35:28浏览次数:44  
标签:请求 nginx server Nginx html location 服务器

一、Niginx是什么?

  • Nginx是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。
  • Niginx是一款轻量级的web服务器/反向代理器,
  • Nginx是高性能的HTTP和 反向代理的web服务器,处理高并发的能力十分强大,能够经受高负载的考验,高达5万个并发连接数。
  • Nginx支持热部署,启动简单,可以做到 7 * 24小时不间断运行,几个月都不需要重新启动。
  • Nginx采用 多进程(单线程)&多路IO复用模型,一个master进程和多个worker进程,woker进程的数量一般和CPU数量一致

二、Nginx的反向代理(正向代理)

 

 

解释一下:

正向代理: 我们平时需要访问国外的浏览器是不是很慢,比如我们要看推特,看GitHub等等。我们直接用国内的服务器无法访问国外的服务器,或者是访问很慢。所以我们需要在本地搭建一个服务器来帮助我们去访问。那这种就是正向代理。(浏览器中配置代理服务器)

反向代理: 那什么是反向代理呢。比如:我们访问淘宝的时候,淘宝内部肯定不是只有一台服务器,它的内部有很多台服务器,那我们进行访问的时候,因为服务器中间session不共享,那我们是不是在服务器之间访问需要频繁登录,那这个时候淘宝搭建一个过渡服务器,对我们是没有任何影响的,我们是登录一次,但是访问所有,这种情况就是 反向代理。对我们来说,客户端对代理是无感知的,客户端不需要任何配置就可以访问,我们只需要把请求发送给反向代理服务器,由反向代理服务器去选择目标服务器获取数据后,再返回给客户端,此时反向代理服务器和目标服务器对外就是一个服务器,暴露的是代理服务器地址,隐藏了真实服务器的地址。(在服务器中配置代理服务器)

 

三、Nginx的负载均衡

什么是负载均衡?

负载均衡建立在现有网络结构之上,它提供了一种廉价有效透明的方法扩展网络设备和服务器的带宽、增加吞吐量、加强网络数据处理能力、提高网络的灵活性和可用性。
负载均衡(Load Balance)其意思就是分摊到多个操作单元上进行执行,例如Web服务器、FTP服务器、企业关键应用服务器和其它关键任务服务器等,从而共同完成工作任务。

简单来说就是:现有的请求使服务器压力太大无法承受,所有我们需要搭建一个服务器集群,去分担原先一个服务器所承受的压力,那现在我们有ABCD等等多台服务器,我们需要把请求分给这些服务器,但是服务器可能大小也有自己的不同,所以怎么分?如何分配更好?又是一个问题。

Nginx提供的三种负载均衡的方式:

  1. 轮询法(默认方法)
    每个请求按照时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除宕机的服务器。

     

    # 服务器三台
    server1 server2 server3 请求过来,会按照时间顺序逐一转发 第一次请求 server1 第二次请求 server2 第三次请求 server3 第四次请求 server1 第五次请求 server2 第六次请求 server3 。。。

     

  2. weight权重模式(加权轮询)
    指定轮询的几率,weight和访问比例成正比,用于后端服务器性能不均的情况。
    这种方式比较灵活,当后端服务器性能存在差异的时候,通过配置权重,可以让服务器的性能得到充分发挥,有效利用资源、权重越大。被访问的概率越大
    # 服务器三台
    server1  1
    server2  1
    server3  3
    
    请求过来,会按照时间顺序逐一转发
    第一次请求 server1
    第二次请求 server2
    第三次请求 server3
    第四次请求 server3
    第五次请求 server3
    第六次请求 server1
    。。。
  3. ip_hash
    上述方式存在一个问题,在负载均衡系统中,假如用户在某台服务器上登录了,那么该用户第二次请求的时候,因为我们是负载均衡系统,每次请求都会重新定位到服务器集群中的某一台,那么已经登录某个服务器的用户再重新定位到另一个服务器,其登录信息将会丢失,这样显然不妥。
    我们可以采用ip_hash指令解决这个问题,如果用户已经访问了某个服务器,当用户再次访问时,会将该请求通过哈希算法,自动定位到该服务器,每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题!

 四、Nginx的动态分离

Nginx的静态处理能力很强,但是动态处理能力不足,因此,在企业中常用动静分离技术。动静分离技术其实是采用代理的方式,在server{}段中加入带正则匹配的location来指定匹配项针对PHP的动静分离:静态页面交给Nginx处理,动态页面交给PHP-FPM模块或Apache处理。在Nginx的配置中,是通过location配置段配合正则匹配实现静态与动态页面的不同处理方式
目前,通过使用Nginx大大提高了网站的响应速度,优化了用户体验,让网站的健壮性更上一层楼!

 

 

 

五、Nginx的安装

yum install nginx

配置文件

user root;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;

# Load dynamic modules. See /usr/share/doc/nginx/README.dynamic.
include /usr/share/nginx/modules/*.conf;

events {
    worker_connections 1024;
}

http {
    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  /var/log/nginx/access.log  main;

    sendfile            on;
    tcp_nopush          on;
    tcp_nodelay         on;
    keepalive_timeout   65;
    types_hash_max_size 4096;

    include             /etc/nginx/mime.types;
    default_type        application/octet-stream;

    # Load modular configuration files from the /etc/nginx/conf.d directory.
    # See http://nginx.org/en/docs/ngx_core_module.html#include
    # for more information.
    include /etc/nginx/conf.d/*.conf;

    add_header Access-Control-Allow-Origin *;
    add_header Access-Control-Allow-Headers X-Requested-With;
    add_header Access-Control-Allow-Methods GET,POST,OPTIONS;




    server {
        listen       80;
        listen       [::]:80;
        server_name  _;
        # root         /root/xj/data/mysite;
        root         /usr/share/nginx/html;

        # Load configuration files for the default server block.
        include /etc/nginx/default.d/*.conf;

        error_page 404 /404.html;
        location = /404.html {
        }

        error_page 500 502 503 504 /50x.html;
        location = /50x.html {
        }
    }

# Settings for a TLS enabled server.
#
#    server {
#        listen       443 ssl http2;
#        listen       [::]:443 ssl http2;
#        server_name  _;
#        root         /usr/share/nginx/html;
#
#        ssl_certificate "/etc/pki/nginx/server.crt";
#        ssl_certificate_key "/etc/pki/nginx/private/server.key";
#        ssl_session_cache shared:SSL:1m;
#        ssl_session_timeout  10m;
#        ssl_ciphers HIGH:!aNULL:!MD5;
#        ssl_prefer_server_ciphers on;
#
#        # Load configuration files for the default server block.
#        include /etc/nginx/default.d/*.conf;
#
#        error_page 404 /404.html;
#            location = /40x.html {
#        }
#
#        error_page 500 502 503 504 /50x.html;
#            location = /50x.html {
#        }
#    }

}

 

启动nginx

systemctl start nginx

访问80端口,效果如下:

 

 

六、Nginx常用命令

whereis nginx  # 查看nginx路径
nginx: /usr/sbin/nginx /usr/lib64/nginx /etc/nginx /usr/share/nginx /usr/share/man/man3/nginx.3pm.gz /usr/share/man/man8/nginx.8.gz


启动:/user/sbin/nginx
指定文件启动:/user/sbin/nginx -c /etc/nginx/nginx.conf

停止:/user/sbin/nginx -s stop

安全退出:/user/sbin/nginx -s quit
重新加载:/user/sbin/nginx -s reload 如果修改了配置文件,就需要重新加载 



或者:
systemctl start nginx
systemctl restart nginx
systemctl stop nginx

 

七、Nginx文件结构

...              #全局块

events {         #events块
   ...
}

http      #http块
{
    ...   #http全局块
    server        #server块
    { 
        ...       #server全局块
        location [PATTERN]   #location块
        {
            ...
        }
        location [PATTERN] 
        {
            ...
        }
    }
    server
    {
      ...
    }
    ...     #http全局块
}

 

  • 1、全局块:配置影响nginx全局的指令。一般有运行nginx服务器的用户组,nginx进程pid存放路径,日志存放路径,配置文件引入,允许生成worker process数等。

    user  nobody;  # nginx运行的用户身份,一般要么注释掉,要么把nobody 改成 www 或 nginx
    worker_processes auto;  # 工作进程数,(如果是双核4线程,可以设置为4,一般建议和CPU的逻辑核数量一致)
    error_log /var/log/nginx/error.log;  # 全局指定nginx错误日志的存放目录
    pid /run/nginx.pid;  # 指定nginx的pid文件目录

     

  • 2、events块:配置影响nginx服务器或与用户的网络连接。有每个进程的最大连接数,选取哪种事件驱动模型处理连接请求,是否允许同时接受多个网路连接,开启多个网络连接序列化等。

    worker_connections 1024;  
    # 最大可以调整到100,000以上, nginx的最大并发连接数 = worker_processes * worker_connections(进程数*连接数)

     

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

    # 导入mime.types模块,让nginx能够识别各种各样的文件资源
    include       mime.types;
    # nginx默认识别的mime.types,默认采用二进制数据格式。
    default_type application/octet-stream;
    ​
    # 设置客户端访问nginx的访问日志格式
    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;
    ​
    # Nginx在进行数据传输,会调用sendfile()函数, Linux 2.0+ 以后的推出的一个系统调用。
    # 对比一般的数据的网络传输sendfile会有更少的切换和更少的数据拷贝。
    sendfile       on;
    tcp_nopush     on;
    ​
    # 客户端保持连接时间
    #keepalive_timeout 0;
    keepalive_timeout  65;
    ​
    # 开启网络传输的数据gzip压缩[会额外消耗一定的cpu资源,但是会节约大量的出口带宽来提高访问速度,gzip压缩算法的使用会带来一定的安全隐患,不建议压缩图片和大文件]
    gzip on;
    #低于1kb的资源不压缩
    gzip_min_length 1k;
    ​
    # 设置压缩级别,级别范围:1~9,数字越大压缩率越高,同时消耗cpu资源也越多,建议设置在5左右。
    gzip_comp_level 5;
    # 指定压缩哪些MIME类型的静态资源,多个空格隔开。不建议压缩图片,视频等二进制文件
    gzip_types text/plain application/javascript application/x-javascript text/javascript text/xml text/css;
    # web站点的虚拟主机,类似python的虚拟环境,这里的配置,会让nginx自动提供一个站点给外界访问
    ​
    # 指定包含的配置文件
    # 可以设置多个 server 模块
    include /etc/nginx/conf.d/*.conf;

     

  • 4、server块:配置虚拟主机的相关参数,一个http中可以有多个server。

    server {
            # 站点的访问端口,要允许外界访问,还需要设置防火墙
            listen       80;
            # 站点的访问域名地址
            server_name  www.luffycity.dabanyu.com;
    
            #charset koi8-r;
    
            #access_log  logs/host.access.log  main;
            # 地址模式匹配,location后面的是访问url路径,相当于django的正则路由一样,
            # 地址匹配成功以后,则会调用当前花括号的配置信息
            location / {
                # root 表示当前站点所在目录
                root   html;
            # index 指定默认首页
                index  main.html main.htm;
            }
            ...
        }

     

     

  • 5、location块:配置请求的路由,以及各种页面的处理情况。

    在proxy_pass 中的代理url后加上/,代理转发的url中就不会带着location中匹配路径;
    如果后面没有/,代理转发的url中就会带上location中的匹配路径

     

    我们访问 http://my.yemao.com/proxy/index.html,其实是访问到了 http://test.yemao.com/index.html

     

我们访问 http://my.yemao.com/proxy/index.html,其实是访问到了 http://test.yemao.com/proxy/index.html。这里将 location 中 匹配的 proxy 也自动加到了 代理转发的地址后面

同理:在使用 upstream定义后台服务器时,效果就类似于没有在转发后面加上/

upstream backend {
    server 127.0.0.1:9999;
}

proxy_pass http://backend;   ==> 等价于  http://test.yemao.com/proxy/index.html

 

如果nginx代理的三个服务器都要在端口*:80上监听。那么nginx首先决定那个服务器应该处理请求:

[注解]  listen 监听某个ip和端口,并根据传来的请求中“Host”字段匹配server_name。然后转给server_name 服务器去处理
server {
    listen      80; # 监听端口
    server_name example.org www.example.org; # 服务器名称
    ...
}

server {
    listen      80;# 监听端口
    server_name example.net www.example.net;# 服务器名称
    ...
}

server {
    listen      80;# 监听端口
    server_name example.com www.example.com;# 服务器名称
    ...
}

 

nginx是根据请求中的"Host"字段来决定应当将这个客户端的请求转发给哪一个web服务器,这个"Host"的值应当是与某一个server_name 相匹配的。

但是, 如果其值与任何服务器的 server_name 都不匹配,或者请求根本不包含"Host"字段,则nginx会将请求转发到此端口的默认服务器。 在上面的配置中,默认服务器是第一个 ,这是nginx的标准默认行为。

它也可以使用listen指令中的default_server参数明确设置哪个服务器应该是默认的,如下所示 example.net www.example.net 将是默认的 server_name:如果一个server_name都匹配不上,则会将请求转给默认服务器

 

server {
    listen      80 default_server; # 监听端口, 此服务器为默认服务器
    server_name example.net www.example.net; # 服务器名称
    ...
}

 

请注意,默认服务器是监听端口(listen)的属性,而不是 server_name 的属性。

如果客户端的请求中没有"Host"字段,那么我们可以定义配置文件,来扔掉这类的客户端请求。

如下的配置中,server_name 设置为一个空字符串,它将匹配没有“Host”头字段的请求,并返回一个特殊的nginx非标准代码444来关闭连接。

server {
    listen      80;
    server_name "";
    return      444;
}

 

不同ip地址的服务器:

# 第一个服务器
server {
    listen      192.168.1.1:80; # 监听此ip的80端口
    server_name example.org www.example.org; # 服务器名
    ...
}

# 第二个服务器
server {
    listen      192.168.1.1:80 default_server; # 监听此ip的80端口
    server_name example.net www.example.net; # 服务器名,为此ip,端口的默认服务器
    ...
}

# 第三个服务器
server {
    listen      192.168.1.2:80 default_server; # 监听此ip的80端口
    server_name example.com www.example.com; # 服务器名,为此ip,端口的默认服务器
    ...
}

 

在上面的配置中,nginx首先根据配置中的serverlisten指令监听请求的ip地址和端口

然后,在监听此IP和端口的server中找到与请求中“Host”字段匹配的server_name , 让这个server_name 来处理请求。如果没有找到匹配的server_name,则由默认服务器处理该请求。

例如,在 192.168.1.1:80 端口上收到的 host 为 www.example.com 请求将由192.168.1.1:80端口的默认服务器处理,即由第二台服务器处理,因为192.168.1.1:80 端口上没有名为 www.example .com 的 server_name。

 

现在我们知道了nginx 配置中是如何选择服务器来处理请求的了

那么在指定的服务器中,由哪一个location 来处理请求呢? 下面的配置中有3个location

匹配location 的过程如下:

location匹配命令

  • ~ : 表示执行一个正则匹配,区分大小写

  • ~*: 表示执行一个正则匹配,不区分大小写

  • ^~: 表示普通字符匹配,如果该选项匹配,则只匹配该选项,其他选项不匹配。一般用于匹配目录

  • = : 表示普通字符精确匹配

  • @: 定义一个自命名的location用于内部定向时使用,列如 error_page, try_files

优先级:

  1. =前缀的指令严格匹配这个查询。如果找到,停止搜索。

  2. 所有剩下的常规字符串,最长的匹配。如果这个匹配使用^〜前缀,搜索停止。

  3. 正则表达式,在配置文件中定义的顺序。

  4. 如果第3条规则产生匹配的话,结果被使用。否则,使用第2条规则的结果。

 

首先,nginx 不管location 的顺序,而是从location 中找到与请求的url 最匹配、最具体的这个location 前缀。

/ 根目录能够匹配到所有的请求,也就是说,所有的请求都可以由 / 根目录的这个location 来处理。 因此 / 根目录的location 是在没有其他的location 匹配这个url 的时候,才会由它处理该请求。

其次,nginx 检查由正则表达式组成的location 。一旦找到匹配的location , 则停止查找,由此location 来处理该请求。

server {
    listen      80; # 监听本机的80端口
    server_name example.org www.example.org; # 服务器名
    root        /data/www;   

    location / { # 这里的 / 表示匹配所有的路径
        index   index.html index.php;
    }

    location ~* \.(gif|jpg|png)$ { # 这里表示为。不区分大小写的正则匹配,匹配以gif、jpg、png结尾的请求
        expires 30d;
    }

    location ~ \.php$ { # 这里的正则表示,匹配以php结尾的请求
        fastcgi_pass  localhost:9000;
        fastcgi_param SCRIPT_FILENAME
                      $document_root$fastcgi_script_name;
        include       fastcgi_params;
    }
}
 

需要注意的是,只匹配请求url中的非参数部分。这是因为,参数可以有很多种方式给出,例如:

/index.php?user=john&page=1
/index.php?page=1&user=john
/index.php?page=1&something+else&user=john # 查询字符串中的内容种类太多了,不好匹
 

举几个例子看看上面的nginx配置是如何处理请求的吧。

  1. 请求url “/logo.gif”首先与location 前缀“/” 匹配,也与正则表达式 “.(gif|jpg|png)”匹配,因此,它由第二个location处理。 使用指令"root" /data/www 将请求映射到文件/data/www/logo.gif,并将该文件返回给客户端。

  2. 请求url“/index.php”首先和lcoation 前缀 "/“匹配,也与正则表达式 “.php$ " 匹配,因此,由第三个location来处理请求。请求被传递给监听localhost:9000的FastCGI服务器。 fastcgi_param指令将FastCGI参数SCRIPT_FILENAME设置为“/data/www/index.php”,FastCGI服务器执行该文件。 变量等于指令的值(),变量 fastcgi_script_name等于请求URI (”/index.php”)。

  3. 请求“/about.html”仅与location前缀 “/” 匹配,因此,该请求由此locatoin处理。 使用 “root” 指令(值 /data/www)将请求映射到文件/data/www/about.html,并将文件返回给客户端。

  4. 请求“/”仅与 location前缀 “/” 匹配,因此该请求由此location处理。然后索引指令根据其参数和 “root” 指令的值/data/www查找文件是否存在。 如果文件/data/www/index.html不存在,并且文件/data/www/index.php存在,则指令执行内部重定向到“/index.php”,并且nginx再次搜索位置 如果请求是由客户发送的。 正如我们之前看到的,重定向的请求最终将由FastCGI服务器处理。

八、Nginx参数详解

worker_processes

woker_processes   1|auto;  # 指定nginx工作时的进程数,设置值小于CPU的核数

worker_connections

worker_connections 1024  # 设置Nginx的最大连接数

keepalive_timeout

keepalive_timeout    65;   # http连接超时时间,默认是65s,当需要上传大文件时,避免文件上传过程中断开连接,导致文件上传失败

gzip

gzip    on;    # 对网络传输的数据内容进行压缩

upstream

# 默认为轮询
upstream backend{
        server    101.35.241.220:8001;
        server    150.158.153.179:8002;
        server    42.194.147.234:8003;
    }

第一个请求 101.35.241.220:8001
第二个请求 150.158.153.179:8002
第三个请求 42.194.147.234:8003
...
    
# 设置权重
upstream backend{
        server    101.35.241.220:8001 weight=1;
        server    150.158.153.179:8002 weight=2 max_fails=2 fail_timeout=2;;
        server    42.194.147.234:8003 weight=1 max_fails=2 fail_timeout=1;
    }

# 请求会按照权重进行转发
第一个请求 101.35.241.220:8001
第二个请求 150.158.153.179:8002
第三个请求 150.158.153.179:8002
第四个请求 42.194.147.234:8003
第四个请求 101.35.241.220:8001
。。。
max_fails=2:允许请求失败的次数,默认为1,当超过最大次数时,返回proxy_next_upstream模块定义的错误。
fail_timeout=1:在经历了max_fails次失败后,暂停服务的时间,max_fails可以和fail_timeout一起使用。
# 热备和下线 upstream backend{ server 101.35.241.220:8001; server 150.158.153.179:8002 down; server 42.194.147.234:8003 backup; } # 150.158.153.179:8002 down 不参与转发 # 42.194.147.234:8003 backup 只有在主服务器挂掉,才会生效

server

server {
        listen       80;  # 监听的端口
        server_name  localhost;  # 声明server_name,Host请求头命中server_name才会走这个server
        
        #charset koi8-r;
        
        #access_log  logs/host.access.log  main;
        
        location / {  # 所有的请求都在走这里
            root   html;  # 指定根目录
            index  index.html index.htm;
            proxy_pass http://backend;  # 请求转发
            proxy_redirect default;
            proxy_set_header    Host    $host;
            proxy_set_header    X_Real_IP    $remote_addr;
            proxy_set_header    X_Forwarded_For    $proxy_add_x_forwarded_for;
            
        }
        
        #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;
        }   
}

注意点

 

# root
location ^~ /t/ {
     root /www/root/html/;
}
如果一个请求的url是/t/a.html。web服务器会返回服务器上/www/root/html/t/a.html的文件内容

# alias
location ^~ /t/ {
 alias /www/root/html/new_t/;
}
如果一个请求是/t/a.html。则web服务器会返回服务器上/www/root/html/new_t/a.html



使用alias的时候,目录名后面一定要加‘/’
alias在使用正则匹配的时候,必须捕获要匹配的内容并在指定的内容处使用
alias只能位于location中,root可以不放在lication中
如果root在全局中和location中都存在,则优先location中的root

 

location

# 配置该服务的访问规则,同一个server可以配置多个location

= 表示精确匹配
^~ 表示uri以指定字符或者字符串开头的前缀匹配,不是正则匹配,一旦匹配则不在查找其他匹配项
~ 表示区分大小写的匹配大小写的正则匹配
~* 表示不区分大小写的正则匹配
/ 表示通用匹配,如果没有其他匹配,任何请求都会匹配到

规则优先级:
= 高于 ^~ 高于 ~* 等于 ~ 高于 /

 

九、负载均衡

http {
    upstream myapp1 {
        server srv1.example.com;
        server srv2.example.com;
        server srv3.example.com;
    }

    server {
        listen 80;

        location / {
            proxy_pass http://myapp1;  # 将请求转发到 定义的服务器里列表中
        }
    }
}

在上面的示例中,在srv1-srv3上运行了3个相同应用程序的实例。 如果没有指明配置负载均衡的方法,则默认为循环方式实现负载均衡。 所有请求都代理到服务器组myapp1,nginx应用HTTP负载平衡来分发请求。要为HTTPS而不是HTTP配置负载均衡,只需使用“https”作为协议。更多详情见 nginx负载均衡官方文档 http://nginx.org/en/docs/http/load_balancing.html

nginx 配置文件的含义见 菜鸟教程-nginx https://www.runoob.com/w3cnote/nginx-setup-intro.html

nginx 负载均衡,反向代理 : https://www.runoob.com/w3cnote/nginx-proxy-balancing.html

Nginx 服务器安装及配置文件详解 https://www.cnblogs.com/bluestorm/p/4574688.html 根据上面了解到的知识,修改 /usr/local/nginx/conf/nginx.conf 为如下:

########### 每个指令必须有分号结束。#################
user root; # 配置用户或用户组,否则有可能会出错
worker_processes auto; # 允许生成的进程数,默认为1
error_log /var/log/nginx/error.log warn; # 指定日志路径,级别。这个设置可以放入全局块,http块,server块,级别依次为:debug|info|notice|warn|error|crit|alert|emerg
pid /run/nginx.pid; # 指定nginx进程运行文件存放地址
 
# Load dynamic modules. See /usr/share/nginx/README.dynamic.
include /usr/share/nginx/modules/*.conf;

events { # events块
    worker_connections 1024; # 最大连接数,默认为512
}

http { # http块
    include             /etc/nginx/mime.types; # 文件扩展名与文件类型映射表
    default_type        application/octet-stream;  # 默认文件类型,默认为text/plain
    # 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  /var/log/nginx/access.log  main;
    sendfile            on; # 允许sendfile方式传输文件,默认为off,可以在http块,server块,location块。
    # tcp_nopush          on; 
    # tcp_nodelay         on;
    keepalive_timeout   65; #连接超时时间,默认为75s,可以在http,server,location块。
    # types_hash_max_size 2048;
    
    # 设定负载均衡后台服务器列表, backend可以修改为其它名字
    upstream backend {
        #ip_hash; # 指定负载均衡的方式,3种,默认为轮询。
        server 192.168.10.100:8080 max_fails=2 fail_timeout=30s ; # 30秒错误2次,这台服务器就挂掉
        server 192.168.10.101:8080 max_fails=2 fail_timeout=30s ;
        server 127.0.0.1:8027;
        server 127.0.0.1:8028;
        server 127.0.0.1:8029;
    }
    
    server { # server块
        listen       80; # 通过80端口访问nginx时
        server_name  localhost; # 服务器名,监听地址
        location / { # location块,# 请求的url过滤,正则匹配,~为区分大小写,~*为不区分大小写。对以 / 所有地址进行负载均衡
            root html;  # 定义服务器的默认网站根目录位置。如果locationURL匹配的是子目录或文件,root没什么作用,一般放在server指令里面或/下
            # index index.html;  #定义路径下默认访问的文件名,一般跟着root放
            # proxy_pass  http://mysvr; 请求转向backend定义的服务器列表,即反向代理,设置被代理服务器的端口或套接字以及URL
            # deny 127.0.0.1;  #拒绝的ip
            # allow 172.18.5.54; #允许的ip   
            include uwsgi_params;
            uwsgi_pass backend;    # 非集群设置的是uWSGI套接字地址,集群则直接使用负载均衡组名
            # uwsgi_pass 127.0.0.1:5000;  # 非集群时使用,如果配合uwsgi使用,则这里要和uwsgi.ini中的socket一致
        }
        
        location /static/ { # 请求静态文件时,将返回/home/myproject/static/xxx 
            alias /home/myproject/static;    
        }

        error_page 404 /404.html; # 错误页
            location = /40x.html {
        }

        error_page 500 502 503 504 /50x.html; # 错误页
            location = /50x.html {
        }
    }
  }

 

标签:请求,nginx,server,Nginx,html,location,服务器
From: https://www.cnblogs.com/xuejian123/p/17209047.html

相关文章

  • 记一次在Ubuntu配置nginx自启动失败
    环境:Ubuntu18.04一般情况下,nginx安装之后是可以自启动的,但由于修改了配置可能会导致自启动失败或自启动后不能跳转到所代理的页面。以下是具体解决方法:1.自启动失败,提......
  • Nginx基础 - 12性能优化
     一、性能优化概述系统结构瓶颈:观察指标、压力测试了解业务模式:接口业务类型、系统层次化结构性能与安全:  性能好安全弱、安全好性能低 二、压力测试工具......
  • Nginx基础 - 13模块与变量
      一、Nginx常用模块Nginx模块分为Nginx官方模块以及Nginx第三方模块Nginx编译选项模块作用ngx_http_core_module包含一些核心的http参数配置......
  • Nginx配置实例-动静分离实例:搭建静态资源服务器
    什么是动静分离Nginx动静分离简单来说就是把动态跟静态请求分开,不能理解成只是单纯的把动态页面和静态页面物理分离。严格意义上说应该是动态请求跟静态请求分开,可以理解......
  • Nginx
    ​ 1分类1.1通用分布式文件系统​和传统的本地文件系统(如ext3、NTFS等)相对应。典型代表:lustre、MooseFS1.1.1优点​标准文件系统操作方式,对开发者门槛较低1.1.......
  • Docker安装Nginx入门示例
    测试环境:Ubuntu20.04Dockerversion23.0.1Nginx容器版本:1.23.31.拉取镜像拉取命令:dockerpullnginx:1.23.3查看镜像:yyj@yyj:~$dockerimagesREPOSITORYTA......
  • 【教学典型案例】28.生产环境nginx限制上传大小
    目录​​一:背景介绍​​​​二:Nginx限制上传大小​​​​1、Nginx官方文档说明​​​​2、设置参数​​​​1)、在server模块中设置​​​​2)、在http模块中设置​​​​三:问......
  • Nginx基础 - 08路径Rewrite
     一、Rewrite基本描述rewrite主要实现url地址重写,以及重定向。 使用场景URL访问跳转:支持开发设计,页面跳转,兼容性支持SEO优化:依赖于url路径,以便......
  • Nginx基础 - 07代理缓存
     缓存是用来减少后端压力,将压力尽可能的往前推, 提高网站的并发延时。一、缓存常见类型服务端缓存:redis/memcached代理缓存,获取服务端内容进行缓存:Nginx_proxy  ......
  • Nginx如何升级Openssl
    1.什么是Openssl?在计算机网络上,OpenSSL是一个开放源代码的软件库包,应用程序可以使用这个包来进行安全通信,避免窃听,同时确认另一端连线者的身份。这个包广泛被应用在互联......