- Nginx更安全;Nginx能更好地处理静态资源(通过一些http request header)。
- Nginx也可以缓存一些动态内容;Nginx可以更好地配合CDN。
- Nginx可以进行多台机器的负载均衡。
- 不需要在wsgi server那边处理keep alive;让Nginx来处理slow client。
特性
- sendfille,系统调用sendfile()通过 DMA把硬盘数据拷贝到 kernel buffer,然后数据被 kernel直接拷贝到另外一个与 socket相关的 kernel buffer。这里没有 user mode和 kernel mode之间的切换,在 kernel中直接完成了从一个 buffer到另一个 buffer的拷贝。
- I/O 多路复用epoll模型 epoll是在2.6内核中提出的,是之前的select和poll的增强版本。select/epoll的好处就在于单个process就可以同时处理多个网络连接的IO。相对于select和poll来说,epoll更加灵活,没有描述符限制。epoll使用一个文件描述符管理多个描述符,将用户关系的文件描述符的事件存放到内核的一个事件表中,这样在用户空间和内核空间的copy只需一次。
- 轻量级,面向性能设计,功能模块少,代码模块少。
- CPU亲和性(affinity),CPU affinity 是一种调度属性(scheduler property), 它可以将一个进程"绑定" 到一个或一组CPU上,一般是master进程
Nginx 相关命令
$ sudo apt-get install nginx //安装
$ sudo service nginx start //启动
$ sudo service nginx status //状态
$ sudo service nginx stop //停止
$ sudo service nginx restart //重启
ps -aux | grep nginx //查看Nginx进程
配置
- /var/www/html :实际的Web内容,它在默认情况下只包含您在前面看到的默认Nginx的页面,供应出的/var/www/html目录。 这可以通过改变Nginx配置文件来改变。
- /etc/nginx :nginx的配置目录。 所有的Nginx配置文件位于这里。
- /etc/nginx/nginx.conf :主要Nginx的配置文件。 这可以修改以更改Nginx全局配置。
- /etc/nginx/sites-available :其中每个站点的“服务器模块”可以保存的目录。 Nginx的不会用找到的配置文件,在这个目录中,除非它们被链接到sites-enabled目录(见下文)。 通常,所有服务器块配置都在此目录中完成,然后通过链接到其他目录启用。
- /etc/nginx/sites-enabled/ :其中,启用每个站点的“服务器块”存储的目录。 通常,这些被链接到配置中找到的文件创建sites-available目录。
- /etc/nginx/snippets :该目录包含可在Nginx的配置在其他地方被列入配置片段,潜在可重复的配置段是重构到片段的良好候选。(这条不懂)
- /var/log/nginx/access.log :到Web服务器的每个请求都被记录在此日志文件,除非Nginx的配置不这样做。
- /var/log/nginx/error.log :任何Nginx的错误会被记录在此日志。
nginx配置的基本思路和步骤如下
- 把2个站点
example1.com
, example2.com
放到 nginx 可以访问的目录 /www/ - 给每个站点分别创建一个 nginx 配置文件 example1.com.conf,example2.com.conf,
并把配置文件放到 /etc/nginx/sites-available/下, - 把/etc/nginx/sites-available/的example1.com.conf,example2.com.conf两个文件,符号链接(默认的default配置文件就是如此,你看sites-enabled下的default文件的属性)到/etc/nginx/sites-enabled/目录下(使用绝对路径)
sudo ln -s /etc/nginx/sites-available/example1.com /etc/nginx/sites-enabled/example1.com
- 确认在 /etc/nginx/nginx.conf 里面有一句
include /etc/nginx/sites-enabled/*;
参考链接
理解 Nginx 源码
深入浅出搞懂Nginx