
作为一个偏应用开发的开发者,最近看到有着15年工作经验的软件工程师爱德华·兹西佐夫发表他的观点,他
认为开发者应该把80%的时间花在基础学习上,然后剩下20%的时间留给框架,库和工具的学习上。我是认同这种
说法的,那么如何好好利用这20%时间学习,我觉得最正解就是框架或者软件的官方文档。英语阅读能力的培养
需要时间成本,但是从长期来看,这成本是值得的(高估了一年所能做的事情,却低估了十年所能做的事情)。
官文:https://nginx.org/en/docs/beginners_guide.html
- nginx是由一个master process和几个worker process组成.主进程负责读和加载配置文件,worker进程负责实际的请求分发。(此处有必要了解CGI和FastCGI)
- nginx worker 进程数可以通过配置文件配置或者自动适配服务器的核数(一般配置为cpu核数一致)
- nginx 和它的模块如何工作是由配置文件决定的
- 配置文件默认名字为nginx.cnf ,文件位置一般位于以下位置: /usr/local/nginx/conf, /etc/nginx, /usr/local/etc/nginx
NGINX 启动,停止和加载配置文件
nginx的启动是通过可执行文件(文件名为就是nginx,并且安装时已经加入环境变量中),nginx启动之后
可以通过该可执行文件(文件名为nginx),加上参数 -s 来控制nginx。
nginx //启动
nginx -s signal //控制命令的格式
常见的signal 值:
stop ---fast shutdown,快速关闭(也可以通过linux 本身的kill 命令,杀掉nginx master process)
quit ---graceful shutdown,优雅关闭,会等到所有请求结束
reload ---reloading the configuration file,重新加载配置文件
reopen ---reopening the log files
quit 优雅的关闭只有在启动nginx的同用户下有效。
- 列出nginx 所有进程
ps -ax | grep nginx
配置文件的结构
- nginx是由模块组成,模块由配置文件中的指令控制
- 指令分为简单指令和块指令。
简单指令由名字和参数组成 (空格隔开,;作为结束符)
include mime.types;
块指令由左右括号包裹并作为结束符
server {
server_name example.com www.example.com;
}
- 配置文件使用# 作为注释
- 上下文(context)
块指令内部叫做上下文,最外层叫作main上下文
服务静态资源
路径路由最终的本质是找到所在服务器静态资源的具体路径.
- 虚拟服务器(server 块)由它们监听的端口和server name来唯一区分(没配置端口表示使用默认标准端口80)
server {
listen 80;
server_name localhost;
location / {
root /data/www;
}
location /images/ {
root /data;
}
}
- 该location书写方式根据最长匹配原则,匹配的请求将会add 到root 命令指定的路径后面。
比如:(注意是add)
http://localhost/images/example.png
/data/images/example.png(绝对路径)
http://localhost/some/example.html
/data/www/some/example.html(绝对路径)
- tips
可以通过在server context 配置一个全局的root 路径,这样后面的location上下文就是基于此路径的
相对路径(location 上下文没有配置root 路径情况)。
原文如下:
Such root directive is used when the location block selected for serving a
request does not include own root directive
配置一个简单代理服务
在location 上下文中使用proxy_pass指令,参数为被代理服务器的协议,名字和端口
server {
location / {
proxy_pass http://localhost:8080;
}
location /images/ {
root /data;
}
}
- 上面就是从官网的beginner's guide文章获取到的一些知识点,后续会针对代理的相对路径和绝对路径作个详细文章