首先了解到Nginx是干什么的?它有哪些作用?比较常用到的基础功能有反向代理、负载均衡、正向代理、http服务器。这次部署用到的就是反向代理。
反向代理就是指在目标服务器和本地客户端之间建立一个中介,每次在本地客户端想要访问目标服务器的时候,nginx则会通过监听到相关的请求,收到请求之后将相应的请求向目标服务器进行请求,将目标服务器发送回来的应答信息返回给本地服务器并且将其显示出来。简单来说就是,外部的服务器是无法通过外部网络来访问的,但是有了代理服务器nginx以后可以通过nginx反向代理到服务器,同时nginx和服务器又是在同一个环境中,其端口号不同。而且nginx可以将服务器的资源保存在本地缓存中,如果再次访问的时候,nginx就不需要再去请求服务器了,直接将之前缓存的资源返回给本地。还有反向负载均衡,即通过将本地的请求分发给多个目标服务器,从而避免造成一个目标服务器的压力过大的情况。
下面这个简单的配置就能够实现nginx的反向代理:
server {
listen 80;
server_name localhost;
client_max_body_size 1024M;
location / {
proxy_pass http://localhost:8080;
proxy_set_header Host $host:$server_port;
}
}
上面指定nginx监听80号端口,并且指定代理的网址。
因为我的操作系统是mac,则首先进到nginx的目录,即/usr/local/nginx/sbin
。
- 启动
启动以后会发现后台有多个nginx进程(取决于你的nginx配置),其中一种是worker process
,另一种是master process
,顾名思义,worker process负责的是将处理本地发送的请求的进程,而master process则负责管理worker process。
sudo ./nginx
- 检查nginx的配置文件是否正确
sudo ./nginx -t
- 重启nginx,这里的重启能够很好的平滑过度,不会存在停止nginx
sudo ./nginx -s reload
- 停止
通过查询ps -ef|grep nginx
,再使用sudo kill -9 pid
即可。
这个是web框架中的服务器,实现了WSGI,uwsgi,https等协议,它负责了将前端的动态请求(如果是静态请求,比如素材,nginx则从其缓存中返回)进行接收,接着web框架会处理对应的信息,将渲染完后相关的页面提交给uWSIGI服务器,有服务器将信息返回给前端。大概的流程如下图:
它的配置也很简单
[uwsgi]
chmod-socket = 664
uid = www-data
gid = www-data
socket = :8000 这里的端口号要和nginx中配置的不同,否则会造成冲突
chdir = "your project dir"
module = project.wsgi
master = true
processes = 4
vacuum = true
启动uwsgi,如果要停下来,control-c即可。
uwsgi --ini uwsgi_name.ini
在配置完了以后,项目的素材无法显示,看logs信息返回的是
通常情况下,我们在nginx配置user的时候默认是www-data;我们可以通过命令#ps aux | grep "nginx: worker process" | awk '{print $1}'
查看woker process的拥有者,判断你的配置是否和命令返回的一致,如果不一致就会发生权限的问题。
接着,如果只是将user改成user yourusername
,依然是不正确的,因为根据nginx的官方文档:
Syntax: user user [group];
Default: user nobody nobody;
Defines user and group credentials used by worker processes. If group is omitted, a group whose name equals that of user is used.
因此漏了一个group,我们可以通过命令id -g -n $whoami
可以查看group name,在后面加上group name,再重启nginx,一切正常!
user username groupname