您的位置:首页 > 运维架构 > Nginx

nginx核心配置文件nginx.conf解释

2020-07-31 11:27 1001 查看

Nginx介绍

Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点(俄文:Рамблер)开发的,第一个公开版本0.1.0发布于2004年10月4日。其将源代码以类BSD许可证的形式发布,因它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名。2011年6月1日,nginx 1.0.4发布。
Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。

Nginx与Apache的区别

Nginx

1.轻量级,采用C进行编写,同样的web服务,会占用更少的内存及资源
2.抗并发, nginx以epoll and kqueue作为开发模型,处理请求是异步非阻塞的,负载能力比apache高很多,而apache则是阻塞型
的。在高并发下nginx能保持低资源低消耗高性能,而 apache在PHP处理慢或者前端压力很大的情况下,很容易出现进程数飙升,从
而拒绝服务的现象。
3. nginx处理静态文件好,静态处理性能比apache高三倍以上
4. nginx的设计高度模块化,编写模块相对简单
5. nginx配置简洁,正则配置让很多事情变得简单,且改完配置能使用-t测试配置有没有问题, apache配置复杂,重启的时候发 现配置
出错了, 会很崩溃
6. nginx作为负载均衡服务器,支持7负载均衡
7. nginx本身就是一个反向代理服务器,且可以作为非常优秀的邮件代理服务器
8.启动特别容易,翔几呼可以做到7*24不间断运行,即使运行数个月也不需要重新启动,还能够不间断服务的情况下进行软件版本的升级
9.社区活跃,各种高性能模块出品迅速

Apache

  1. apache的rewrite比nginx强馱,在rewrite频繁的情况下,用apache
  2. apache发展到现在,模块超多,基本想到的都可以找到
  3. apache更为成熟,少bug , nginx的bug相对较多
  4. apache超稳定
  5. apache对PHP支持比较简单, nginx需要配合其他后端用
  6. apache在处理动态请求有优势, nginx在这方面是鸡肋,一 般动态请求要apache去做, nginx适给静态和反向。
  7. apache仍然是目前的主流,拥有丰富的特性,成熟的技术和开发社区

总结

两者最核心的区别在于apache同步移进程模型,一个连接对应一个进程,而nginx异步的,多个连接(万级别)可以对应一一个进程
般来说,需要性能的web服务,用nginx。如果不需要性能只求稳定,更考虑apache ,者的各种功能模块实现得比前者,例如ssI的模
块就比前者好,可配置项多。epol(freebsd. 上是kqueue )网络IO模型是nginx处理性能高的根本理由,但并不是所有的情况下都是epoll
大获全胜的,如果本身提供静态服务的就只有寥寥几个文件, apache的select模型或许比epoll更高性能。当然,这只是根据网络I0模型的
原理作的一个假设,真正的应用还是需要实测了再说的。
更为通用的方案是,前端nginx抗并发,后端apache集群,配合起来会更好。

nginx.conf详解

整体结构

1.设置worker进程的用户,指的linux中的用户,会涉及到nginx操作目录或文件的一些权限,默认为nobody

user root;

2.worker进程工作数设置,一般来说CPU有几个,就设置几个,或者设置为N-1也行

worker_processes 1;

3.nginx 日志级别

debug | info | notice | warn | error | crit | alert | emerg,错误级别从左到右越来越大

4.设置nginx进程 pid

pid        logs/nginx.pid;

###5.设置工作模式

events {
# 默认使用epoll
use epoll;
# 每个worker允许连接的客户端最大连接数
worker_connections  1024;
}

6.http 是指令块,针对http网络传输的一些指令配置

http {
}

7.include 引入外部配置,提高可读性,避免单个配置文件过大

include       mime.types;

8.设定日志格式,main为定义的格式名称,如此 access_log 就可以直接使用这个变量了

参数名	参数意义
$remote_addr	客户端ip
$remote_user	远程客户端用户名,一般为:’-’
$time_local	时间和时区
$request	请求的url以及method
$status	响应状态码
$body_bytes_send	响应客户端内容字节数
$http_referer	记录用户从哪个链接跳转过来的
$http_user_agent	用户所使用的代理,一般来时都是浏览器
$http_x_forwarded_for	通过代理服务器来记录客户端的ip

9.sendfile|使用高效文件传输,提升传输性能。启用后才能使用tcp_nopush,是指当数据表累积一定大小后才发送,提高了效率。

sendfile        on;
tcp_nopush      on

;

10.keepalive_timeout设置客户端与服务端请求的超时时间,保证客户端多次请求的时候不会重复建立新的连接,节约资源损耗。

#keepalive_timeout  0;
keepalive_timeout  65;

11.gzip启用压缩,html/js/css压缩后传输会更快

gzip on;

12.server可以在http指令块中设置多个虚拟主机

server{} 用于定义一个虚拟主机:nginx支持使用基于主机名或IP的虚拟主机

listen 监听端口
server_name localhost、ip、域名
location 请求路由映射,匹配拦截
root 请求位置(资源的根目录)
index 首页设置

server {
listen       80;
server_name  localhost;

location / {
root   /home; #注意,它指的是location的根目录,用户访问的应该是 /web/htdocs下的文件。
index  index.html index.htm;
}
}

12.location 匹配规则

location是定义请求的上下文的,location可以放在server虚拟主机中也可以放在location之中(也就是location嵌套location)。它允许根据用户请求的URI来匹配指定的各location以进行访问配置;匹配到时,将被location块中的配置所处理。匹配规则如下:

1. ** =:精确匹配,
2. ~:正则表达式模式匹配,匹配时区分字符大小写
3. ~:正则表达式模式匹配,匹配时忽略字符大小写
4. ^~:只需要前半部分与uri匹配即可,不检查正则表达式
*

匹配的优先级:字符字面量最精确匹配、正则表达式检索(由多个时,由第一个匹配到的所处理),按字符字面量。

这里是使用文献和参考的文章
https://www.cnblogs.com/zhenghengbin/p/12079846.html
https://www.cnblogs.com/ziyoublog/p/10893116.html
https://baike.baidu.com/item/nginx/3817705?fr=aladdin

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: