一、Nginx
1、简介
nginx是一款轻量级的web服务器,反向代理服务器。
教程参考
2、具体使用
nginx日志
- 放于路径
var/log/nginx
下,名为access_log
和error_log
tail -f error_log
:可使用该命令读取文件,随着文件更新会不断刷新。Ctrl+c退出该模式。
nginx配置文件
- 放于路径
etc/nginx
下 - 默认配置文件:
nginx.conf
- 该文件最后一行有include,表示包含
./conf.d/
目录下的所有配置文件 ./conf.d
目录下有一个默认配置文件default.conf
- 该文件最后一行有include,表示包含
命令:
- 开始?:
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_timeout
或uwsgi_send_timeout
设置时长太短,但还不确定。
uwsgi的3个容易掉坑的配置(timeout、harakiri、buffer-size)