概述
一:概念
Nginx是一个高性能的http和反向代理服务器,它看起来好像不太符合英文单词的拼写习惯,因为Nginx是由名为
伊戈尔·赛索耶夫的俄罗斯人开发的。
Nginx主要特点为占用内存小,处理并发能力强悍,在国内被广泛采用。目前像阿里,腾讯,百度等国内巨头公
司都在使用。
二:优点
1:可以高并发链接(Epoll高性能网络I/O模型)
2:内存消耗少
3:成本廉价(开源软件)
4:配置文件简单
5:内置的健康检查(不会影响前端访问)
6:支持热部署(可以一直不重启)
三:安装教程
学一个东西,看概念听别人说都是虚的,实操才是真道理。既然要学nginx,那就先装上nginx吧。
Windows
1、下载地址:http://nginx.org/en/download.html
2、下载压缩包后解压
3、浏览器地址输入127.0.0.1,可以看到nginx的欢迎页面
Mac
首先Mac上要安装homebrew,至于这是个什么东西,自行去看。绝对好东西(homebrew官网)
1、打开终端,习惯性命令:
brew update
2、终端继续执行命令:
brew search nginx //查询要安装的软件是否存在
3、有利于后面的配置:
brew info nginx
运行结果:
可以看到,nginx在本地还未安装(Not installed),nginx的来源(From),Docroot默认为/usr/local/var/www,在/usr/local/etc/nginx/nginx.conf配置文件中默认端口被配置为8080从而使nginx运行时不需要加sudo,nginx将在/usr/local/etc/nginx/servers/目录中加载所有文件,以及我们可以通过最简单的命令 ‘nginx’ 来启动nginx。
4、正式开始安装:
brew install nginx
5、查看nginx安装目录:
open /usr/local/etc/nginx/
成功打开nginx目录,也可以看到如info所说servers目录以及nginx.conf的配置文件(后面会用到这个配置文件)。但我们并没有找到nginx被安装到了哪里。
6、终端继续执行:
open /usr/local/Cellar/nginx //其实这个才是nginx被安装到的目录
7、终端执行nginx,启动nginx。随后浏览器输入http://localhost:8080/
可能会由于8080端口被占用,导致不能正常启动nginx,则可以在配置文件中修改端口号。
四:nginx.conf
nginx.conf是nginx重要的配置文件。配置虚拟主机,反向代理,是否采用负载均衡等等一系列的配置,都是在
nginx.conf进行配置的。文件结构主要由三块组成:全局块,events块,http块;
http块中包含http全局块和多个server块,每个server块中包含server全局块和多个location块,采用就近原则生效
全局块:配置一些影响整体运行的指令,通常有服务器用户组允许生成的worker process nginx.pid存放路径 日志存放路径 类型 配置文件引入
events块:影响nginx服务器与用户的网络连接,这一块的设置对服务的性能影响较大。通常有是否开启对WP下的网络进行序列化 是否允许同时接受多个网络连接 事件驱动模型 每个WP可以同时支持处理的最大连接数
http块:重要组成部分,代理、缓存和日志定义、第三方模块的配置。 通常配置 文件引入 MIME-TYPE定义 日志自定义 是否使用sendfile传输文件 连接超时时间 单连接请求数上限
1.全局模块常用配置
1.1配置用户组
运行用户可不设置,默认即是nginx
#配置alleyz用户 admin组下有启停权限
user alleyz [admin];
1.2配置运行进程数
nginx进程,建议设置为和本机cpu核数一致
如果设置为数字,启动以后就有多少个worker process
设置为auto表示自动检测
#表示nginx启动四个进程
worker_processes 4;
1.3配置pid文件存放路径
默认存放在logs/nginx.pid
pid:进程标识符
pid logs/nginx.pid;
1.4配置错误日志文件的存放路径
可在全局块、http块、server块、location块配置
error_log file | stderr [ debug| info | notice | warn | error | crit | alert | emerg]
1.5配置文件引入
可在任意地方引入
缺省值: none
#包含一个目录下所有以”.conf”结尾的文件
include vhosts/*.conf;
- 事件(events)模块的常用组件
2.1选择事件驱动模型
use kqueue | rtsig | epoll | /dev/poll | select | poll | eventport
2.2配置最大连接数
允许每一个WP同时开启的最大连接数。此值不能大于操作系统支持的打开的最大文件句柄数.
worker_connections number; #默认值 512
2.3accept_mutex
默认开启(激活)
当一个新连接到达时,如果激活了accept_mutex,那么多个Worker将以串行方式来处理,其中有一个Worker会被唤醒,其他的Worker继续保持休眠状态;如果没有激活accept_mutex,那么所有的Worker都会被唤醒,不过只有一个Worker能获取新连接,其它的Worker会重新进入休眠状态,这就是「惊群问题」
accept_mutex on | off;
2.4设置是否允许同时接受多个连接
默认关闭
multi_accept on | off;
2.5连接超时时间
keepalive_timeout 60;
客户端请求头部的缓冲区大小
这个可以根据你的系统分页大小来设置,一般一个请求头的大小不会超过1k,不过由于一般系统分页都要大于1k,所以这里设置为分页大小,且该值必须设置为“系统分页大小”的整倍数。
client_header_buffer_size 4k;
2.6为打开文件指定缓存
这个将为打开文件指定缓存,默认是没有启用的,max指定缓存数量,建议和打开文件数一致,inactive是指经过多长时间文件没被请求后删除缓存。
open_file_cache max=65535 inactive=60s;
2.7设置检查一次缓存的有效信息的间隔时间
open_file_cache_valid 80s;
2.8open_file_cache_min_uses
open_file_cache指令中的inactive参数时间内文件的最少使用次数,如果超过这个数字,文件描述符一直是在缓存中打开的。
#如果有一个文件在inactive时间内一次没被使用,它将被移除
open_file_cache_min_uses 1;
- HTTP模块的核心组件和变量
http模块主要有三个作用域: http,server,location
http域:可以嵌套多个server,配置代理,缓存,日志定义等绝大多数功能和第三方模块的配置。如文件引入,mime-type定义,日志自定义,是否使用sendfile传输文件,连接超时时间,单连接请求数等。
server域:配置虚拟主机的相关参数,一个http中可以有多个server。
location域:配置请求的路由,以及各种页面的处理情况。
该模块下有些配置的语法过于复杂,下文只简单介绍
3.1 通用的配置
#配置该域内需要引用文件或路径的一个“相对根路径”
#默认值:root html
root /data/test;
3.2.HTTP作用域
include mime.types; #文件扩展名与文件类型映射表
default_type application/octet-stream; #默认文件类型
charset utf-8; #默认编码
server_names_hash_bucket_size 128; #服务器名字的hash表大小
client_header_buffer_size 32k; #上传文件大小限制
large_client_header_buffers 4 64k; #设定请求缓
client_max_body_size 8m; #设定请求缓
sendfile on; #开启高效文件传输模式,sendfile指令指定nginx是否调用sendfile函数来输出文件,对于普通应用设为 on,如果用来进行下载等应用磁盘IO重负载应用,可设置为off,以平衡磁盘与网络I/O处理速度,降低系统的负载。注意:如果图片显示不正常把这个改成off。
autoindex on; #开启目录列表访问,合适下载服务器,默认关闭。
tcp_nopush on; #防止网络阻塞
tcp_nodelay on; #防止网络阻塞
keepalive_timeout 120; #长连接超时时间,单位是秒
#FastCGI相关参数是为了改善网站的性能:减少资源占用,提高访问速度。
fastcgi_connect_timeout 300;
fastcgi_send_timeout 300;
fastcgi_read_timeout 300;
fastcgi_buffer_size 64k;
fastcgi_buffers 4 64k;
fastcgi_busy_buffers_size 128k;
fastcgi_temp_file_write_size 128k;
#gzip模块设置
gzip on; #开启gzip压缩输出
gzip_min_length 1k; #最小压缩文件大小
gzip_buffers 4 16k; #压缩缓冲区
gzip_http_version 1.0; #压缩版本(默认1.1,前端如果是squid2.5请使用1.0)
gzip_comp_level 2; #压缩等级
gzip_types text/plain application/x-javascript text/css application/xml;
#压缩类型,默认就已经包含text/html,所以下面就不用再写了,写上去也不会有问题,但是会有一个warn。
gzip_vary on;
#limit_zone crawler $binary_remote_addr 10m; #开启限制IP连接数的时候需要使用
#负载均衡
upstream server.com {
#upstream的负载均衡,weight是权重,可以根据机器配置定义权重。weigth参数表示权值,权值越高被分配到的几率越大。
server 192.168.80.121:80 weight=3;
server 192.168.80.122:80 weight=2;
server 192.168.80.123:80 weight=3;
}
3.3.Server作用域
#监听端口
listen 80;
#监听地址,可以采用域名,多个用空格隔开
server_name www.abc.com abcd.com;
#单连接请求上限次数。
keepalive_requests 120;
#配置该域内其它文件相对路径的相对根路径
#默认值:root html
root /data/test;
#遇到500,502等错误,重定向到/50x.html地址
error_page 500 502 503 504 /50x.html;
#定义本虚拟主机的访问日志
access_log /var/log/nginx/qianyunlai.log main;
3.4.location 作用域
localtion匹配规则说明
root /data/cat; #location内根目录
index html.index; #设置默认页
proxy_pass http://localhost:8888; #请求转向的服务器
proxy_pass http://localhost:8888/; 这样会丢弃localtion中的路径。
deny 127.0.0.1; #拒绝的ip
allow 172.18.5.54; #允许的ip
3.5alias
alias会把location后面配置的路径丢弃掉,把当前匹配到的目录指向到指定的目录。
使用alias时,目录名后面一定要加”/”。
alias可以指定任何名称。
alias在使用正则匹配时,必须捕捉要匹配的内容并在指定的内容处使用。
location ~ /page/ {
alias /data/statics/newPage/
}
如果一个请求的URI是/page/error/error.page时,web服务器将会返回服务器上的/data/statics/newPage/error/error.page的文件。
最后
以上就是愉快导师为你收集整理的Nginx初探一:概念二:优点三:安装教程的全部内容,希望文章能够帮你解决Nginx初探一:概念二:优点三:安装教程所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复