1. 新建配置文件

在/etc/nginx/conf.d 新建文件default.conf

2. default.conf中的常用配置项

# 负载均衡两个服务
upstream linuxidc {
    server 127.0.0.1:5000;
    server 127.0.0.1:6000;
}
server {
    listen 80;
    server_name flask_demo.mayanan.cn;
    location / {
        proxy_pass http://linuxidc;
    }
    charset utf-8;  # 设置支持utf-8
    # 静态文件访问路径
    location ^~ /static/ {  # 注意:location 后面的路径名与最后一级目录名一致
        # root /home/mayanan/docker_test03/;  # 文件目录所在的地址
        alias /home/mayanan/docker_test03/static/;
        autoindex on;  # 目录显示所有文件
        # 对于txt和jpg文件,强制以附件形式下载,不要浏览器直接打开
         if ($request_filename ~* ^.*?\.(txt|jpg|png)$) {
            add_header Content-Disposition 'attachment';
        }
    }
}

# 同一端口代理不同应用
server {
    listen 80;
    server_name mayanan.cn;
    location /baidu {
        proxy_pass https://www.baidu.com/;
    }
    location /flask_demo {
        proxy_pass http://flask_demo.mayanan.cn/;
    }
    location / {
        proxy_pass http://127.0.0.1:8000/;
    }
}

3. nginx主配置文件

Nginx的配置文件nginx.conf位于/etc/nginx/目录下;

nginx.conf由多个块组成,最外面的块是main,main包含Events和HTTP,HTTP包含upstream和多个Server,Server又包含多个location:

main(全局设置)、server(主机设置)、upstream(负载均衡服务器设置)和 location(URL匹配特定位置的设置)

  • main块设置的指令将影响其他所有设置;
  • server块的指令主要用于指定主机和端口;
  • upstream指令主要用于负载均衡,设置一系列的后端服务器;
  • location块用于匹配网页位置。

这四者之间的关系式:server继承main,location继承server,upstream既不会继承其他设置也不会被继承。
在这四个部分当中,每个部分都包含若干指令,这些指令主要包含Nginx的主模块指令、事件模块指令、HTTP核心模块指令,同时每个部分还可以使用其他HTTP模块指令,例如Http SSL模块、HttpGzip Static模块和Http Addition模块等。

4. nginx的全局配置

每个配置选项的含义解释如下:

  • user是个主模块指令,指定Nginx Worker进程运行用户以及用户组,默认由nobody账号运行。
  • worker_processes是个主模块指令,指定了Nginx要开启的进程数。每个Nginx进程平均耗费10M~12M内存。建议指定和CPU的数量一致即可。
  • error_log是个主模块指令,用来定义全局错误日志文件。日志输出级别有debug、info、notice、warn、error、crit可供选择,其中,debug输出日志最为最详细,而crit输出日志最少。
  • pid是个主模块指令,用来指定进程pid的存储文件位置。
  • worker_rlimit_nofile用于绑定worker进程和CPU, Linux内核2.4以上可用。

events事件指令是设定Nginx的工作模式及连接数上限:
use是个事件模块指令,用来指定Nginx的工作模式。Nginx支持的工作模式有select、poll、kqueue、epoll、rtsig和/dev/poll。其中select和poll都是标准的工作模式,kqueue和epoll是高效的工作模式,不同的是epoll用在Linux平台上,而kqueue用在BSD系统中。对于Linux系统,epoll工作模式是首选。
worker_connections也是个事件模块指令,用于定义Nginx每个进程的最大连接数,默认是1024。最大客户端连接数由worker_processes和worker_connections决定,即Max_client=worker_processes*worker_connections。
在作为反向代理时,max_clients变为:max_clients = worker_processes * worker_connections/4。
进程的最大连接数受Linux系统进程的最大打开文件数限制,在执行操作系统命令“ulimit -n 65536”后worker_connections的设置才能生效

参考链接:Nginx的配置文件详解(超详细)_wangbin_0729的博客-CSDN博客_nginx配置文件详解

6. Nginx配置文件示例

 # 全局块
 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;
    }
     
  }
 }

 7. Nginx Location配置

Nginx Location配置是Nginx的核心配置,它负责匹配请求的url, 并根据Location里定义的规则来处理这个请求,比如拒绝、转发、重定向或直接提供文件下载。

URL匹配方式及优先级

Nginx的Location配置支持普通字符串匹配和正则匹配,不过url的各种匹配方式是有优先级的,如下所示:

匹配符匹配规则优先级
=精确匹配1
^~以某个字符串开头2
~区分大小写的正则匹配3
~*不区分大小写的正则匹配4
!~区分大小写的不匹配正则5
!~*不区分大小写的不匹配正则6
/通用匹配,任何请求都会匹配到7

 为了加深你的理解,我们来看如下一个例子。由于规则2的优先级更高,当用户访问/static/或则/static/123.html时,Nginx会优先执行规则2里的操作,其它的的请求则会交由规则1执行。

# 规则1:通用匹配
 location / {
 }
 
 # 规则2:处理以/static/开头的url
 location ^~ /static {                        
    alias /usr/share/nginx/html/static; # 静态资源路径
 }

注意:上例中我们使用了alias别名设置了静态文件所在目录,我们还可以使用root指定静态文件目录。注意:aliasroot是有区别的。

  • root对路径的处理:root路径 + location路径

  • alias对路径的处理:使用alias路径替换location路径

如果用root设置静态文件资源路径,可以按如下代码设置。两者是等同的。

 # 规则2:处理以/static/开头的url
 location ^~ /static {                        
    root /usr/share/nginx/html; # 静态资源路径
 }

8. Nginx静态文件配置

Nginx可直接作为强大的静态文件服务器使用,支持对静态文件进行缓存还可以直接将Nginx作为文件下载服务器使用

静态文件缓存

缓存可以加快下次静态文件加载速度。我们很多与网站样式相关的文件比如css和js文件一般不怎么变化,缓存有效器可以通过expires选项设置得长一些。

     # 使用expires选项开启静态文件缓存,10天有效
    location ~ ^/(images|javascript|js|css|flash|media|static)/ {
      root   /var/www/big.server.com/static_files;
      expires 10d;
    }

9. 静态文件压缩

Nginx可以对网站的css、js 、xml、html 文件在传输前进行压缩,大幅提高页面加载速度。经过Gzip压缩后页面大小可以变为原来的30%甚至更小。使用时仅需开启Gzip压缩功能即可。你可以在http全局块或server块增加这个配置。

http {
     
     # 开启gzip压缩功能
    gzip on;
     
     # 设置允许压缩的页面最小字节数; 这里表示如果文件小于10k,压缩没有意义.
    gzip_min_length 10k;
     
     # 设置压缩比率,最小为1,处理速度快,传输速度慢;
     # 9为最大压缩比,处理速度慢,传输速度快; 推荐6
    gzip_comp_level 6;
     
     # 设置压缩缓冲区大小,此处设置为16个8K内存作为压缩结果缓冲
    gzip_buffers 16 8k;
     
     # 设置哪些文件需要压缩,一般文本,css和js建议压缩。图片视需要要锁。
    gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;
     
 }

 10. 文件下载服务器

Nginx也可直接做文件下载服务器使用,在location块设置autoindex相关选项即可。

 server {
 
    listen 80 default_server;
    listen [::]:80 default_server;
    server_name _;
     
    location /download {    
         # 下载文件所在目录
        root /usr/share/nginx/html;
         
         # 开启索引功能
        autoindex on;  
         
         # 关闭计算文件确切大小(单位bytes),只显示大概大小(单位kb、mb、gb)
        autoindex_exact_size off;
         
         #显示本机时间而非 GMT 时间
        autoindex_localtime on;  
                 
         # 对于txt和jpg文件,强制以附件形式下载,不要浏览器直接打开
         if ($request_filename ~* ^.*?\.(txt|jpg|png)$) {
            add_header Content-Disposition 'attachment';
        }
    }
 }

参考链接:万字长文看Nginx配置详解!

参考链接2:大江狗

Logo

更多推荐