虚拟主机
基于域名的虚拟主机
所谓基于域名的虚拟主机,意思就是通过不同的域名区分不同的虚拟主机,基于域名的虚拟主机是企业应用最广的虚拟主机类型,几乎所有对外提供服务的网站都是使用基于域名的虚拟主机
基于端口的虚拟主机
基于端口的虚拟主机,意思就是通过不同的端口来区分不同的虚拟主机,此类虚拟主机对应的企业应用主要为公司内部的网站
基于IP的虚拟主机
基于IP的虚拟主机,意思就是通过不同的IP区分不同的虚拟主机
基于域名虚拟主机配置
在主配文件http模块里加入
include extra/www.conf; #加入此项表示当服务器被访问时在extra下找对应的server配置文件 服务端不需要server配置 include extra/mail.conf; include extra/status.conf;
在conf下创建extra目录
mkdir /usr/local/nginx/conf/extra
在extra下建立对应的server配置文件
vim /usr/local/nginx/conf/extra/www.conf
#以下为www.conf的配置内容 其他2项略 server { listen 80; server_name www.wk.com; location / { root /var/www/html/wwwcom; index index.html index.htm; } error_page 500 502 503 504 /50x.html; location = /50x.html { root /var/www/html; } }
根据不同的server配置建立不同的网页目录
mkdir -p /var/www/html/wwwcom #在目录下放入对应的网页文档即可访问
虚拟主机别名
实现多个域名可以访问一个虚拟主机
server { listen 80; server_name www.wk.com wk.com www.hehe.com; #server_name配置多个域名即可 location / { root /var/www/html/wwwcom; index index.html index.htm; } error_page 500 502 503 504 /50
状态功能模块
确认编译时是否设定了此模块
--with-http_stub_status_module模块就是状态信息模块
/usr/local/nginx/sbin/nginx -V nginx version: nginx/1.14.0 built by gcc 4.4.7 20120313 (Red Hat 4.4.7-23) (GCC) built with OpenSSL 1.0.1e-fips 11 Feb 2013 TLS SNI support enabled configure arguments: --user=www --group=www --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module
设定信息模块配置
新建一个server端显示信息功能模块
server{ listen 80; server_name status.wk.com; location / { stub_status on; #开启状态信息功能 access_log off; #不记录访问日志 }
状态信息模块配置方式和搭建虚拟网站类似需要占用一个域名来访问 状态信息模块设置访问权限防止外部用户查看。
显示结果
Active connections: 2 #表示Nginx正在处理的活动连接2个 server accepts handled requests 39 39 41 Reading: 0 Writing: 1 Waiting: 1
server表示Nginx启动到现在一共处理了39个连接 accepts表示Nginx启动到现在共成功创建了39次握手 handled requests,表示总共处理了41次请求
Reading为Nginx读取到客户端的Header信息数 Writing为Nginx返回给客户端的Header信息数 Waiting为Nginx已经处理完正在等候下一次请求指令的驻留连接
增加错误日志
范例:error_log file level;
常见的日志级别【debug|info|notice|warn|error|crit|alert|emerg】
生产场景一般是warn|error|crit这三个级别之一,注意不要配置info等较低级别,会带来巨大磁盘I/O消耗。
error_log的默认值为:
# default:error_log logs/error.log error;
worker_processes 1; error_log logs/error.log; #非常简单,一般增加此行即可 events { worker_connections 1024; }
Nginx访问日志轮询切割
此功能由ngx_http_log_module模块负责
控制参数:
log_format #用来定义记录日志的格式可定义多种格式取不同的名字
access_log #用来指定日志文件的路径及使用何种日志的格式记录日志
nginx日志格式中默认的参数
log_format main '$remote_addr - $remote_user [$time_local] "$request" ' #log_format格式参数以记名字 '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"';
access_log logs/access.log main; #以main格式记录日志存放在logs/access.log里
nginx日志变量格式说明
$remote_addr #记录访问网站的客户端地址
$http_ x_forwarded for #当前端有代理服务器时,设置Web节点记录客户端地址的配置,此参数效的前提是代理服务器上也进行了相关的x forwarded for 设置
$remote_user #远程客户端用户名称
$time_local #记录访问时间与时区
$request #用户的http请求起始行信息
$status #http 状态码,记录请求返回的状态,例如: 200、404、301等
$body_bytes_sents #服务器发送给客户端的响应body字节数
$http_feferer #记录此次请求是从哪个链接访问过来的,可以根据referer进行防盗链设置
$http_user agent #记录客户端访问信息,例如:浏览器、手机客户端等
日志切割
默认情况下Nginx会把所有的访问日志生成到一个指定的访问日志文件access.log里,但这样一来,时间长了就会导致日志个头很大,不利于日志的分析和处理,因此,有必要对Nginx日志,按天或按小时进行切割,使其分成不同的文件保存。
#切割脚本见博文 nginx安装应用
Nginx location
location使用的语法为:
location [ = | ~ | ~* | ^~ ] uri {
...
}
上述语法中的URI部分是关键,这个URI可以是普通的字符串地址路径,或者是正则表达式,匹配成功则执行后面大括号里的相关命令。正则表达式的前面还可以有“~”或“~*”等特殊字符。
匹配这两种特殊字符“~”或“~*”的区别为:“~”用于区分大小写(大小写敏感)的匹配;“~*”用于不区分大小写的匹配。还可以用逻辑操作符“!”对上面的匹配取反,即“!~”和“!~*”。此外,“^~”的作用是先进行字符串的前缀匹配(必须以后边的字符串开头),如果能匹配到,就不再进行其他location的正则匹配了。
顺序 | 匹配标识的location | 匹配说明 |
---|---|---|
1 | " location = / { " | 精确匹配 |
2 | " location ^~ /images/ { " | 先进行字符串的前缀匹配,如果匹配到就不做正则匹配检查 |
3 | " loction ~* .(gif | jpg | jpeg)$ { " | 正则匹配,*为不区分大小写 |
4 | " location /documents/ { " | 匹配常规字符串,模糊匹配,如果有正则检查,正则优先 |
5 | " location / { " | 所有location都不能匹配后的默认匹配原则 |
Nginx rewrite
rewrite指令语法
指令语法:rewrite regex replacement 【flag】;
默认值:none
应用位置:server,location,if
rewrite是实现URL重写的关键指令,根据regex(正则表达式)部分的内容,重定向到replacement部分,结尾是flag标记。下面是一个简单的URL rewrite跳转例子:
rewrite ^/(.*) http://www.baidu.com/$1 permanent;
rewrite为固定关键字,表示开启一条rewrite匹配规则,regex部分是^(.*),这是一个正则表达式,表示匹配所有,匹配成功后跳转到http://www.baidu.com/。这里的1是取前面regex部分括号里的内容,结尾的permanent;是永久301重定向标记,即跳转到后面的http://www.baidu.com/$1 地址上。
regex常用正则表达式
rewrite指令的最后一项参数flag标记的说明
- 在以上的flag标记中,last和break用来实现URL重写,浏览器地址栏的URL地址不变,但在服务器端访问的程序及路径发生了变化。redirect和permanent用来实现URL跳转,浏览器地址栏会显示跳转后的URL地址。
- last和break标记的实现功能类似,但二者之间有细微的差别,使用alias指令时必须用last标记,使用proxy_pass指令时要使用break标记。last标记在本条rewrite规则执行完毕后,会对其所在的server{...}标签重新发起请求,而break标记则会在本条规则匹配完成后,终止匹配,不再匹配后面的规则。
Nginx的rewrite功能在企业里应用
- 可以调整用户浏览的URL,使其看起来更规范,合乎开发及产品人员的需求。
- 为了让搜索引擎收录网站内容,并让用户体验更好,企业会将动态URL地址伪装成静态地址提供服务
- 网站换新域名后,让旧域名的访问跳转到新的域名上,例如:让京东的360buy换成了jd.com
- 根据特殊变量,目录,客户端的信息进行URL跳转等。
server{ listen 80; server_name wk.com; rewrite ^/(.*) http://www.wk.com/$1 permanent; #当用户访问wk.com及下面的任意内容时,都会通过这条rewrite跳转到www.wk.com对应的地址 }
rewrite跳转标记flag使用总结
1,在根location(即location / {...})中或server{...} 标签中编写rewrite规则,建议使用last标记
2,在普通的location(例 location/yunjisuan/{...}或if{}中编写rewrite规则,则建议使用break标记)
Nginx访问认证
有时,在实际工作中企业要求我们为网站设置访问账号和密码权限,这样操作后,只有拥有账号密码的用户才可以访问网站内容。
这种使用账号密码才可以访问网站的功能主要应用在企业内部人员访问的地址上,例如:企业网站后台,MySQL客户端phpmyadmin,企业内部的CRM,WIKI网站平台。
创建密码文件
我们可以借用apache的htpasswd软件,来创建加密的账号和密码
htpasswd -bc /usr/local/nginx/conf/.htpasswd wk 123123 #没有htpasswd可以yum -y install httpd
-b非交互指定密码 -c指定信息储存文件 用户名 密码
cat /usr/local/nginx/conf/.htpasswdwk:FC1/eEc/iK0Mo #账号密码是加密的(.htpasswd是文件的名字)
在虚拟主机配置文件里加入两条配置信息
server { listen 80; server_name blog.yunjisuan.com; location / { root /var/www/html/blogcom; index index.html index.htm; auth_basic "登录wk"; #加入这条配置 auth_basic_user_file /usr/local/nginx/conf/.htpasswd; #加入这条配置 } }
auth_basic :验证的基本信息选项(后边跟着的双引号里就是验证窗口的名字)
auth_basic_user_file :验证的用户文件(后边根账号密码文件的绝对路径)
基于ip的权限访问控制
在location里加入访问规则
deny ip/ip段; (拒绝ip或网段通过) allow ip/ip段; (允许ip或网段通过) #从上到下匹配既停止