万字长文看Nginx配置详解!

Nginx是一个强大的免费开源的HTTP服务器和反向代理服务器。在Web开发项目中,nginx常用作为静态文件服务器处理静态文件,并负责将动态请求转发至应用服务器(如Django, Flask, etc)。熟悉Nginx的配置对Web开发和运维人员来说至关重要。本文整理了Nginx的配置大全及关键知识点,比如Nginx负载均衡的5种算法,root和alias的区别,如何设置静态文件压缩和缓存,Nginx如何与uwsgi服务器交互,可以作为开发者很好的参考。

Nginx的安装

Nginx的安装很简单,网上教程很多,这里仅以Ubuntu系统(Linux)演示:

 # 安装nginx
 sudo apt-get install nginx
 
 # 启动nginx服务
 sudo systemctl nginx start

Nginx启动时通常会使用默认设置, 使用如下命令可以让自己的配置文件生效。

 # 删除/etc/nginx/sites-available/目录下默认自定义配置
 sudo rm -rf /etc/nginx/sites-available/default
 
 # sites-available目录下新建自定义配置文件,可以1个网站1个
 sudo nano /etc/nginx/sites-available/myapp1
 
 # 与sites-enabled目录建立软链,可让自定义配置文件生效
 sudo ln -s /etc/nginx/sites-available/myapp1 /etc/nginx/sites-enabled
 
 # 检查nginx配置文件是否有问题
 sudo systemctl nginx –t
 
 # 重启nginx服务
 sudo systemctl nginx restart

注意:如果你不是使用sudo apt-get命令安装的nginx,而是直接使用yum命令或docker镜像安装的,nginx的默认自定义配置文件位于/etc/nginx/conf.d/default.conf。如果你希望让自定义配置文件生效,你需要先删除这个默认配置文件,然后在`/etc/nginx/conf.d/目录下新建一个nginx.conf

如果你使用docker安装nginx,Dockerfile里可以设置将宿主机的当前目录下的nginx.conf复制一份到的容器内的/etc/nginx/conf.d/的目录下,如下所示:

 # nginx镜像Dockerfile
 FROM nginx:latest
 
 # 删除原有配置文件,创建静态资源文件夹和ssl证书保存文件夹
 RUN rm /etc/nginx/conf.d/default.conf 
 
 # 将自定义配置文件nginx.conf复制到容器内/etc/nginx/conf.d/目录
 ADD ./nginx.conf /etc/nginx/conf.d/
 
 # 关闭守护模式
 CMD ["nginx", "-g", "daemon off;"]

Nginx配置文件构成

一个Nginx配置文件通常包含3个模块:

  • 全局块:比如工作进程数,定义日志路径;

  • Events块:设置处理轮询事件模型,每个工作进程最大连接数及http层的keep-alive超时时间;

  • http块:路由匹配、静态文件服务器、反向代理、负载均衡等。

其中http块又可以进一步分成3块,http全局块里的配置对所有站点生效,server块配置仅对单个站点生效,而location块的配置仅对单个页面或url生效。

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转发请求到通过ups
  • 4
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值