Nginx基础与主机服务部署
来源:互联网 发布:uefi ubuntu 双系统 编辑:程序博客网 时间:2024/06/05 07:45
Nginx基础与主机服务部署
一、 基础介绍
Nginx ("engine x") 是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP服务器。其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。
1. 程序架构
master/worker 一个master进程: 负载加载和分析配置文件、管理worker进程、平滑升级 一个或多个worker进程: 处理并响应用户请求缓存相关的进程: cache loader:载入缓存对象 cache manager:管理缓存对象特性:异步、事件驱动和非阻塞 并发请求处理:通过epoll/select 文件IO:高级IO sendfile,异步,mmapnginx高度模块:高度模块化,但其模块早期不支持DSO机制;近期版本支持动态装载和卸载; 模块分类: 核心模块:core module 标准模块: HTTP modules: Standard HTTP modules Optional HTTP modules Mail modules Stream modules 第三方 modules
2. 安装配置
官方的预制包:http://nginx.org/packages/centos/7/x86_64/RPMS/编译安装:
~]# yum groupinstall "Development Tools" "Server Platform Development" 安装编译所需组件~]# yum install pcre-devel openssl-devel zlib-devel~]# useradd -r nginx 编译安装需要执行此步骤~]# ./configure --prefix=/usr/local/nginx --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --user=nginx --group=nginx --with-http_ssl_module --with-http_v2_module --with-http_dav_module --with-http_stub_status_module --with-threads --with-file-aio 根据自己所需进行编辑配置,初学建议使用yum安装,本人初学,所以yum安装。\# make && make install
程序环境: 配置文件的组成部分: 主配置文件:nginx.conf 模块化配置文件conf.d/*.conf 主程序文件:/usr/sbin/nginx
3. http协议相关的配置结构
注意: (1) 配置指令必须以分号结尾; (2) 支持使用配置变量; 内建变量:由Nginx模块引入,可直接引用; 自定义变量:由用户使用set命令定义; set variable_name value; 引用变量:$variable_name主配置文件结构:main block:主配置段,也即全局配置段; event { ... }:事件驱动相关的配置; http { ... }:http/https 协议相关的配置段; mail { ... } stream { ... }http协议相关的配置结构 http { ...:各server的公共配置 每个server用于定义一个虚拟主机,建议在nginx安装目录下的conf.d目录下定义***.conf文件使用,默认主配置文件加载已包含conf.d下的*.conf文件,也可在主配置文件http公共配置段使用include 后跟配置文件绝对路径用以加载自定义配置文件 server { listen port; server_name www.test.com; root /PATH/TO/WWW/; location [OPERATOR] URL { ... if CONDITION { ... } } } }
4. 配置指令
4.1 main配置段常见的配置指令
4.1.1正常运行必备的配置 User user_name[group];执行进程的用户或组,默认为nobody Pid /PATH/TO/PID_FILE;存储主进程进程号码的文件路径 Include file;载入其它配置文件 Load_module file;指明加载动态模块(支持前提下) 4.1.2优化性能相关的配置Worker_processes number | auto ;声明worker进程数量,小于等于物理核心数Worker_cpu_affinity cpumask | auto ;声明进程运行在那颗cpu上,可使用cpumask 00001 00100 使用第一、二颗。Worker_priority number;worker进程优先级[-20~19],默认为0Worker_rlimit_nofile number;每个进程可打开最多的文件数量4.1.3用于调试及定位问题相关的配置Daemon on | off;是否以守护进程方式运行nginxMaster_process on | off;是否以master_process模型运行,默认为onError_log file [level];错误日志目录及错误级别4.1.4事件驱动相关的配置Worker_connections number;每个进程最大并发连接数;Use method;并发请求处理方法Accept_mutex on | off;on为轮流处理新请求,off为新请求通知所有进程,空闲进程处理
4.2 http相关配置
4.2.1 listen address:por t[default_server] [ssl] [backlog=number] [rcvbuf=size] [sndbuf=size];default_server:设定为默认虚拟主机;ssl:限制仅能够通过ssl连接提供服务;backlog=number:后援队列长度;rcvbuf=size:接收缓冲区大小;sndbuf=size:发送缓冲区大小;4.2.2 server_name name ;虚拟主机名称,支持通配符,正则表达式,匹配机制:1字符串精确匹配,2左侧*通配符。3右侧*通配符,4正则表达式。off 服务端响应内容很小时会积累下几个响应内容一起发送。4.2.4 Sendfile on | off;是否开启sendfile功能4.2.5 Tcp_nopush on | off;在sendfile模式下,on为应用层首部在内核与数据合成发送,off为先发送数据,应用层首部后发。4.2.6 Root path ;web资源映射路径,站点根目录4.2.7 Location [ = | ~ | ~* | ^~ ] URI{......}一个server中location配置段可存在多个,用于实现从uri到文件系统的路径映射;ngnix会根据用户请求的URI来检查定义的所有location,并找出一个最佳匹配,而后应用其配置;=:对URI做精确匹配;例如, http://www.magedu.com/,~:对URI做正则表达式模式匹配,区分字符大小写;~*:对URI做正则表达式模式匹配,不区分字符大小写;^~:对URI的左半部分做匹配检查,不区分字符大小写;不带符号:匹配起始于此uri的所有的url;匹配优先级:=, ^~, ~/~*,不带符号;4.2.8 alias path ;定义路径别名,文档映射,仅能使用location上下文注意:location中使用root指令和alias指令的意义不同; (1) root,给定的路径对应于location中的/uri/左侧的/; (2) alias,给定的路径对应于location中的/uri/右侧的/;4.2.9 index file ...;默认页,一般为index index.html | php4.2.10 error_page code ... [=reqponse]] uri;定义显示的错误页面如:error_page 404 403 =200 /data/error.html 如果是404,403响应码,则返回响应码为200,显示错误页/data/error.html4.2.11 try_files file ... uri;顺序检查文件是否存在,返回第一个找到的文件。结尾的斜线表示为文件夹 -$uri/。如果所有的文件都找不到,会进行一个内部重定向到最后一个参数。4.2.12 keepative_timeout number;保持连接超时时长,默认75s4.2.13 keepative_requests number;一次长连接允许最多请求数,默认1004.2.14 keepative_disable none | brower ...;对设定的浏览器禁用长连接4.2.15 send_timeout time;响应报文超时时长,两次写操作之间时间间隔,超时关闭连接4.2.16 client_body_buffer_size size;接收客户端请求报文body部分的缓冲区大小,默认16k,超出根据client_body_temp_path指令所定义的位置生产缓存文件4.2.17 client_body_temp_path path [level1 [level2[level3]]];设置存储客户端请求报文body部分的缓冲区目录,子目录及数量 client_body_temp_path path /var/tmp/client_body 1 2 3 1:表示用一位16进制数字表示一级子目录;0-f 16 2:表示用2位16进程数字表示二级子目录:00-ff 256 2:表示用2位16进程数字表示三级子目录:00-ff 2564.2.18 limit_rate rate;限制响应客户端的传输速率,单位bytes/second ,0表示无限制4.2.19 limit_except method {...};限制对指定的请求方法外的其他方法的客户端使用权限如:limit_except GET { allow 192.168.1.0/24; deny all; }除192.167.1网段的用户可使用get之外的方法,其他人不可使用4.2.20 aio on | off;是否启用aio功能4.2.21 directio size | off;在Linux主机启用O_DIRECT标记,此处意味文件大于等于给定的大小时使用,例如directio 4m;4.2.22 open_fle_cache max=N [inactive=time] | off;nginx可以缓存以下三种信息: (1) 文件的描述符、文件大小和最近一次的修改时间; (2) 打开的目录结构; (3) 没有找到的或者没有权限访问的文件的相关信息; max=N:可缓存的缓存项上限;达到上限后会使用LRU算法实现缓存管理; inactive=time:缓存项的非活动时长,在此处指定的时长内未被命中的或命中的次数少于open_file_cache_min_uses指令所指定的次数的缓存项即为非活动项;4.2.23 open_file_cache_valid time;检查缓存时间间隔,默认60s4.2.24 open_file_min_uses number;在open_file_cache 指令的inactive参数指定时长内至少应该呗使用多少次才可被归为活动项4.2.25 open_file_cache_errors on | off ;是否缓存查找文件时发生的错误信息
5. 常用module简介
5.1 Ngx_http_access_module;基于IP控制访问功能 Allow address | all ;访问白名单 Deny address | all;访问黑名单5.2 ngx_http_auth_basic_module;基于用户访问控制 auth_basic string | off;提示信息 auth_basic_user_file passwdfile;指明用户验证文件如;location /admin/ { auth_basic "Please input !"; auth_basic_user_file /etc/nginx/.ngxpasswd; }验证文件使用http-tools提供的htppasswd命令生产5.3 ngx_http_stub_status_module ;输出nginx状态信息stub_status;如:location /basic_status(自定义) { stub_status; }状态信息:Active connections: 291 server accepts handled requests 16630948 16630948 31070465 Reading: 6 Writing: 179 Waiting: 106 Active connections: 活动状态的连接数;accepts:已经接受的客户端请求的总数;handled:已经处理完成的客户端请求的总数;requests:客户端发来的总的请求数;Reading:处于读取客户端请求报文首部的连接的连接数;Writing:处于向客户端发送响应报文过程中的连接数; Waiting:处于等待客户端发出请求的空闲连接数;5.4 ngx_http_log_module ;日志log_format name srting ......;定义日志格式(只能在http下定义),string为nginx核心模块与其他模块内嵌的变量access_log path [format [buffer=size] [gzip[=level]] [flush=time] [if=condition]] | off;访问日志文件路径,格式及相关缓冲配置open_log_file_cache max=N [inactive=time] [min_uses=N] [valid=time] | off;日志缓存(元数据)配置exp:open_log_file_cache max=2048 inactive=5 min_uses=3 valid=30;日志缓存最大文件数为2048,在5秒内访问大于等于3次为活动项,30秒刷新一次5.5 ngx_http_gzip_module;压缩模块gzip on | off ;是否启用压缩gzip_comp_level level(1-9,默认1);设置压缩比级别gzip disable regex ...;根据正则表达式配置浏览器类型,匹配到不进行压缩gzip_min_length length;压缩起始大小,默认20gzip_buffers number size ;设置压缩响应缓冲区的数量和大小gzip_proxied off | expired | no-cache | no-store | private | no_last_modifed | no_etag | auth | any ..;nginx作为代理服务器接收到从被代理服务器发送的响应报文后,在何种条件下启用压缩功能的gzip_types mime-type ...;压缩过滤器,仅对此处设定类型的内容启用压缩功能;可在/nginx/mime.types文件内查看类型5.6 ngx_ssl_module ;ssl模块ssl on | off ;是否启用sslssl_certificate file;指明虚拟机使用的pem格式的证书***.crtssl_certificate_key file;指明与证书所匹配的私钥ssl_protocols [SSLv2] [SSLv3] [TLSv1] [TLSv1.1] [TLSv1.2];支持协议,默认为TLS系列协议ssl_session_cache off | none | [builtin[:size]] [shared:name:size];builtin[:size]:使用OpenSSL内建的缓存,此缓存为每worker进程私有;[shared:name:size]:在各worker之间使用一个共享的缓存;ssl_session_timeout time;一个客户端可以重用会话参数的时间server { listen 443 ssl; server_name www.magedu.com; root /vhosts/ssl/htdocs; ssl on; ssl_certificate /etc/nginx/ssl/nginx.crt; ssl_certificate_key /etc/nginx/ssl/nginx.key; ssl_session_cache shared:sslcache:20m;}5.7 ngx_http_rewrite_module;重写替换rewrite regex replacement [flag];将用户请求的URI基于regex所描述的模式进行检查,匹配到时将其替换为replacement指定的新的URI;注意:如果在同一级配置块中存在多个rewrite规则,那么会自下而下逐个检查;被某条件规则替换完成后,会重新一轮的替换检查,[flag]:last,break在服务端完成重写操作, redirect,permanent返回重写信息到客户端由客户重新发起请求last:重写完成后停止对当前URI在当前location中后续的其它重写操作,而后对新的URI启动新一轮重写检查;提前重启新一轮循环; break:重写完成后停止对当前URI在当前location中后续的其它重写操作,而后直接跳转至重写规则配置块之后的其它配置;结束循环;redirect:重写完成后以临时重定向方式直接返回重写后生成的新URI给客户端,由客户端重新发起请求;不能以http://或https://开头;permanent:重写完成后以永久重定向方式直接返回重写后生成的新URI给客户端,由客户端重新发起请求;return;返回** return code [text]; return code URL; return URL;rewrite_log on | off;是否启用重写日志if (condition) { ... }引入一个新的配置上下文 ;条件满足时执行配置块中的配置指令;condition: 比较操作符: =;相等 !=;不等 ~:模式匹配,区分字符大小写; ~*:模式匹配,不区分字符大小写; !~:模式不匹配,区分字符大小写; !~*:模式不匹配,不区分字符大小写; 文件及目录存在性判断: -e、!-e;文件存在 -f、 !-f;普通文件 -d,、!-d;目录文件 -x,、!-x;可执行文件set \$variable value; 用户自定义变量5.8 ngx_http_referer_module;图片防盗链模块valid_referers none | blocked | server_names | string...;定义referer首部的合法可用值none:请求报文首部没有referer首部;blocked:请求报文的referer首部没有值;server_names:参数,其可以有值作为主机名或主机名模式;string:直接字符串,但可使用*作通配符;regular expression:被指定的正则表达式模式匹配到的字符串;要使用~打头,例如 ~.*\.\.com;如:location ~* \.(jpg) { valid_referers none blocked server_names *.stu45.com if ($invalid_referer) { return 404; }
二、 主机服务部署
1. 初始化虚拟主机
安装完成后,在安装目录conf.d下新建一个.conf文件用于定义虚拟主机,默认在主配置文件的http配置段中已有include命令载入conf.d下的所有.conf文件,编辑新建文件,如下:
这里没有设置默认页,继承主配置文件中的index.html,需要在设置的根目录下新建index.html文件,
]# echo ‘<h1>stu44</h1>’ > /nginx/stu/index.html
完成后,使用nginx –t 检查语法,nginx –s reload 重载配置。
注意:每次修改配置后,需要重载配置。测试如下:
2. https
根据前面说明,编写配置如下:
测试:
3. gzip
根据前面说明,编写配置如下:
测试
4. 访问加密与Status page
根据前面说明,编写配置如下:
测试:
输入用户、密码:
密钥文件使用httpd-tools提供的htpasswd工具生成
5. Rewrite
在主机配置段内添加一条指令:rewrite ~*/(.*).png /$1.jpg last;将所有以.png的URL重定向到同一目录下的jpg资源,可以重定向到其他目录下,目录下没有png格式图片,
访问时访问png格式图片(名称要相同)
6. Referer
使用另一个主机的referer.html引用当前主机的gif图片,引用如下:
测试:
7. Set、return与if
添加内容如下,val变量值与匹配值相同时,执行上下文内容
访问https://www.stu45.com/set
阅读全文
0 0
- Nginx基础与主机服务部署
- nginx服务一---nginx部署安装记录
- nginx安装与部署
- Nginx安装与部署
- nginx web服务基础搭建
- docker nginx实现一个主机部署多个站点
- nginx部署http服务(一)
- 用supervisor+nginx部署服务的流程
- nginx + uwsgi 部署python django web服务
- apache主机重写规则与nginx主机重写规则转换
- Nginx的部署与配置
- Nginx的安装与部署
- 云主机Linux系统部署Apache Web服务
- 【APP】为Kubernetes集群中服务部署Nginx入口服务
- Linux系统管理与服务部署
- Windows 证书服务部署安全基础框架
- Nginx服务简介及基础应用
- 在CENTOS7上玩转Ethereum区块链(5): 实验一--在两台主机上分别部署eth rpc与truffle合约服务
- velocit--静态页面模板
- servlet学习
- Kotlin&Java对照学习笔记
- Table Layout
- React项目打包后,404的解决方案
- Nginx基础与主机服务部署
- 阻止表单多次被点击
- MySQL优化系列(八)--锁机制超详细解析(锁分类、事务并发、引擎并发控制)
- Nginx 核心模块、HTTP模块、邮件模块解析
- Jmeter 接口测试工具性能测试需求分析
- Eigen 模板库的简介
- NDK入门 第一个NDK项目
- IDEA+Maven+TestNG+Selenium环境搭建
- easyui 设置dataGrid选中行的背景颜色