【Nginx | uwsgi】基础知识 | 错误分析

一、Nginx

1、简介

nginx是一款轻量级的web服务器,反向代理服务器。
教程参考

2、具体使用

nginx日志

  • 放于路径var/log/nginx下,名为access_logerror_log
    • tail -f error_log:可使用该命令读取文件,随着文件更新会不断刷新。Ctrl+c退出该模式。

nginx配置文件

  • 放于路径etc/nginx
  • 默认配置文件:nginx.conf
    • 该文件最后一行有include,表示包含./conf.d/ 目录下的所有配置文件
    • ./conf.d目录下有一个默认配置文件default.conf

命令:

  • 开始?:nginx
  • 立即停止:nginx -s stop
  • 执行完当前请求再停止:nginx -s quit
  • 重新加载配置文件,相当于restart:nginx -s reload
  • 将日志写入一个新的文件:nginx -s reopen
  • 测试配置文件:nginx -t
upstream django {
    
    
    ip_hash;
    server web:8000; # Docker-compose web服务端口
}

server {
    
    
    listen 80 ssl; # 监听80端口
    server_name localhost; # 可以是nginx容器所在ip地址或127.0.0.1,不能写宿主机外网ip地址

    charset utf-8;
    client_max_body_size 102400M; # 限制用户上传文件大小
    # client_body_buffer_size 100M;

    # openssl生成的https证书
    ssl_certificate     /home/ssl/server.crt;
    ssl_certificate_key /home/ssl/server.key;
    ssl_protocols       TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers         HIGH:!aNULL:!MD5;
    ssl_password_file   /home/ssl/cert.pass;

    #location /static {
    
    


    location / {
    
    
        include /etc/nginx/uwsgi_params;
        uwsgi_pass django;
        uwsgi_read_timeout 600;
        uwsgi_connect_timeout 600;
        uwsgi_send_timeout 600;

        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;
        # proxy_pass http://django; # 使用uwsgi通信,而不是http,所以不使用proxy_pass。
    }
}

    access_log /var/log/nginx/access.log main;
    error_log /var/log/nginx/error.log warn;

    server_tokens off;
FROM nginx:latest

# 删除原有配置文件,创建静态资源文件夹和ssl证书保存文件夹
RUN rm /etc/nginx/conf.d/default.conf
# && mkdir -p /usr/share/nginx/html/static \
    # && mkdir -p /usr/share/nginx/html/media
# && mkdir -p /usr/share/nginx/ssl

# 设置Media文件夹用户和用户组为Linux默认www-data, 并给予可读和可执行权限,
# 否则用户上传的图片无法正确显示。
# RUN chown -R www-data:www-data /usr/share/nginx/html/media \
#     && chmod -R 775 /usr/share/nginx/html/media

# 添加配置文件
ADD ./nginx.conf /etc/nginx/conf.d/

# 复制https认证需要文件
COPY ./server.crt ./server.key ./cert.pass /home/ssl/

# 关闭守护模式
CMD ["nginx", "-g", "daemon off;"]

3、错误分析

上传/下载大文件时(当时还没写分片传输的接口),服务器报错。上服务器看了nginx的报错日志,空白无内容,查看uwsgi的,发现是临时文件大小超过了。上网查找关键字,需要在nginx.conf中添加uwsgi_max_temp_file_size字段(不写的话是有个默认值的)

二、uwsgi

3、错误分析

1)harakiri(服务器响应时间)设置

合并文件时,请求超过1min客户端收到报错502bad gateway,上服务器查看uwsgi的错误日志发现有一系列输出跟harakiri关键字有关。一个请求时长超过harakiri设置的时间,服务器就会强制中断该请求,且该请求剩余内容不会继续执行(这点与http-timeout和socket-timeout逻辑正好相反)
当设置修改完之后,再次请求,收到了504 Gateway Time-out的报错,这是因为nginx.conf中uwsgi_read_timeoutuwsgi_send_timeout设置时长太短,但还不确定。
uwsgi的3个容易掉坑的配置(timeout、harakiri、buffer-size)

猜你喜欢

转载自blog.csdn.net/qq_42438771/article/details/126244880