一、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、其他
【其他】
端口号
8080:提供www服务,tomcat web server起起来默认在这个端口
443:https端口
80:http端口
【教程链接】
https://www.bilibili.com/video/BV1rG4y1e7BQ?p=2&vd_source=355f51e17c26bc7e2a94ce96a3de4eba
https://www.yuque.com/wukong-zorrm/cql6cz/uoz0cq
【正向代理 在客户端代理转发请求 如VPN】
【反向代理 在服务器代理转发请求】
反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器。简单来说就是真实的服务器不能直接被外部网络访问,所以需要一台代理服务器,而代理服务器能被外部网络访问的同时又跟真实服务器在同一个网络环境,当然也可能是同一台服务器,端口不同而已。
【控制】
nginx 启动nginx
nginx -s stop 停止nginx
nginx -s reload 重新加载配置文件,相当于restart
nginx -t 测试配置文件
【文件】
nginx日志路径 /var/log/nginx tail -f error.log
配置文件 /etc/nginx 默认是nginx.conf
【配置文件】
listen 后跟的端口号是外界访问使用的端口号
【配置 服务器】
先将自己的服务跑起来,举例在a端口上
proxy_pass 动态代理,应该填写跑在a端口上的网址
4、错误分析
上传/下载大文件时(当时还没写分片传输的接口),服务器报错。上服务器看了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)