前言
安装和nginx简介,我是看的视频,由于不懂make,make install等编译命令,所以,我就先讲了,非常推荐大家先去看看视频说nginx是什么,能做什么,记下来,再来看官方文档学习怎么用。
所以这里掠过安装和介绍,准备好虚拟机,和官方文档http://nginx.org/en/docs/同步进行学习吧!
先试试服务器能不能跑起来,启动nginx
访问竟然报403了,但看得出来nginx已经启动,解决方法:https://www.cnblogs.com/haon/p/10959934.html,非403错误试着关闭一下防火墙
以下黑色字为文档的我个人的翻译,我对文档的学习理解标注为红色,斜体 代表与文档无关的内容
开始
这篇文档分为四节,最后一节先不看了我
- nginx信号量命令
- nginx.conf文件结构
- 如何处理静态资源
- 做一个简单的服务器代理
- 做一个FastCGI代理(这什么东东?)
一、信号量命令
熟悉java线程的朋友,应该听过Semaphore类(我不懂只是大概知道是做线程通信用的?),不熟悉也不要紧,这里只要记住这个单词S开头和进(线)程通信就好了,有助于记忆这个命令。
命令长这样
四个signal可选
- stop 快速关闭
- quit 区别于stop的关闭,这个会先把请求处理完再关
- reload 重载配置文件
- reopen 重写日志文件
ex:nginx -s stop
文档只详细讲了reload这个命令,(前置知识你得知道nginx是由一个master进程和多个worker进程组成),master进程收到reload命令后会检验和应用配置文件,如果验证通过,启动新的worker进程,通知原先的worker关闭,并平滑转移请求,否则,master进程会回滚继续用旧配置,并且通知旧的worker停止接受新请求并在处理完当前所有连接后关闭
master进程和worker进程,以下简称主线程和工作线程
我对这两个进程是望文生义,主线程应该是负责接收请求的,工作线程负责处理请求,像在SocketServer,当accept()到请求后交给线程池处理。当然现实并不如此,nginx能处理高并发的请求得益于AIO模型,当然这里我举的例子只是我猜测两个进程的地位。
关于如何回滚,这里并没有提到,不知道是不是和kill -usr2一样的原理。
二、nginx.conf文件配置
讲的和我看的安装视频差不多,分享给大家
ex:指令块 {
指令 xxxxx;
指令 xxxxx;
}
介绍了主要的4个代码块
这四个代码块是有嵌套关系的,events和http是顶级代码块,server在http里,location在server里,结构大致如下
三、处理静态请求
这里就是结合上面的知识对上面的一些配置,指令做个demo应用,跟着做就行了,这里用到了一个新命令
root:location负责匹配请求路径,这里location是优先最长匹配策略,root则是nginx主目录里的真实文件夹路径
ex:
server { location / { root /data/www; } location /images/ { root /data; } }
如果URL是/images/1.jpg,那么真实文件得在 安装目录/data/images/1.jpg 才不会报404
我写的时候遇到一个小问题,以为指令块要用分号结尾,指令才需要分号,reload命令的时候,报错了,改完再reload没问题。
四、设置简单代理服务器
这里大概讲了三个东西
1、root指令也可以写在server下,功能一样
ex:
server { listen 8080; root /data/up1; location / { } }
2、proxy_pass 指令,配置代理
ex:
server { location / { proxy_pass http://localhost:8080; } location /images/ { root /data; } }
3、location 接正则表达式
ex:
location ~ .(gif|jpg|png)$ { root /data/images; }
五、配置FastCGI代理,用不着,先不看