Nginx服务应用
虚拟主机
基于域名的虚拟主机
所谓基于域名的虚拟主机,意思就是通过不同的域名区分不同的虚拟主机,基于域名的虚拟主机是企业应用最广的虚拟主机类型,几乎所有对外提供服务的网站都是使用基于域名的虚拟主机
基于端口的虚拟主机
基于端口的虚拟主机,意思就是通过不同的端口来区分不同的虚拟主机,此类虚拟主机对应的企业应用主要为公司内部的网站
基于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 ;
server_name www.wk.com;
location / {
root /var/www/html/wwwcom;
index index.html index.htm;
}
error_page /50x.html;
location = /50x.html {
root /var/www/html;
}
}
根据不同的server配置建立不同的网页目录
mkdir -p /var/www/html/wwwcom #在目录下放入对应的网页文档即可访问

虚拟主机别名
实现多个域名可以访问一个虚拟主机
server {
listen ;
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 /
状态功能模块
确认编译时是否设定了此模块
--with-http_stub_status_module模块就是状态信息模块
/usr/local/nginx/sbin/nginx -V
nginx version: nginx/1.14.
built by gcc 4.4. (Red Hat 4.4.-) (GCC)
built with OpenSSL 1.0.1e-fips Feb
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 ;
server_name status.wk.com;
location / {
stub_status on; #开启状态信息功能
access_log off; #不记录访问日志
}
状态信息模块配置方式和搭建虚拟网站类似需要占用一个域名来访问 状态信息模块设置访问权限防止外部用户查看。
显示结果
Active connections: #表示Nginx正在处理的活动连接2个
server accepts handled requests Reading: Writing: Waiting:
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 ;
error_log logs/error.log; #非常简单,一般增加此行即可
events {
worker_connections ;
}
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 ;
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 ;
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或网段通过)
#从上到下匹配既停止
Nginx服务应用的更多相关文章
- 安装Nginx服务
Nginx最大特点: 静态小文件(1M),支持高并发,同时占用系统资源很少.3W并发,10个进程,内存150M. Nginx特点: 1.配置简单,灵活,轻量. 2.高并发(静态小文件),静态几万的并发 ...
- nginx服务傻瓜搭建
nginx服务傻瓜搭建 安装步骤: 一.先准备好相关源码包和程序包,如下图 所有包都在云服务器的/src目录下. 二.安装 1.安装nginx服务器,支持vod stream.fileupload c ...
- Nginx服务状态监控
在Nginx的插件模块中有一个模块stub_status可以监控Nginx的一些状态信息,默认安装可能没有这个模块,手动编译的时候加一下即可. 1. 模块安装 先使用命令查看是否已经安装这个模块: [ ...
- Nginx服务安装配置
1.Nginx介绍 Nginx是一个高性能的HTTP和反向代理服务器,由俄罗斯人开发的,第一个版本发布于2004年10月4日.Nginx由于出色的性能,在世界范围内受到了越来越多人的关注,其特点是占有 ...
- 9. nginx服务实验笔记
LNMP安装与配置 Nginx与apache.lighttp性能综合对比,如下图: 一.系统需求: CentOS/RHEL/Fedora/Debian/Ubuntu系统 需要3GB以上硬盘 ...
- Python 监控nginx服务是否正常
Python 监控nginx服务是否正常 #!/usr/bin/env python import os, sys, time from time import strftime while True ...
- (转)不停止Nginx服务的情况下平滑变更Nginx配置
在不停止Nginx服务的情况下平滑变更Nginx配置 1.修改/usr/local/webserver/nginx/conf/nginx.conf配置文件后,请执行以下命令检查配置文件是否正确: /u ...
- Nginx系列~Nginx服务启动不了
Nginx服务有时起动不了了,原因是80端口为其它应用程序占用了,这时,我们需要查看是哪个程序占用了它,可能是IIS的某个站点,或者Tomat,Apache等,都有可能,所以,我们需要查看一下电脑80 ...
- Nginx高性能服务器安装、配置、运维 (4) —— Nginx服务、架构及其信号
五.Nginx服务.架构及其信号 (1)Nginx服务的查看 1.netstat -antp 查看Nginx是否在80端口运行: 2.ps aux|grep nginx 查看nginx相关进程: 发现 ...
- Nginx+Keepalived主备切换(包含nginx服务停止)
原文地址:http://blog.sina.com.cn/s/blog_79ac6aa80101bmed.html Nginx+Keepalived主备切换(包含nginx服务停止) 环境: VM中4 ...
随机推荐
- Hive的日志操作
想要看hive的日志,我们查看/home/hadoop/hive/conf/hive-log4j2.properties # list of properties property.hive.log. ...
- 《python解释器源码剖析》第7章--python中的set对象
7.0 序 集合和字典一样,都是性能非常高效的数据结构,性能高效的原因就在于底层使用了哈希表.因此集合和字典的原理本质上是一样的,都是把值映射成索引,通过索引去查找. 7.1 PySetObject ...
- Android异常与性能优化相关面试问题-内存泄漏面试问题讲解
Java内存泄漏基础知识: Java的内存的分配策略 a.静态存储区:也叫方法区,主要是存放一些静态数据及全局变量等,在程序编译时就已经分配好了,并且在静态存储区中存放的变量在整个程序运行期间都存在. ...
- PAT乙级1018
题目链接 https://pintia.cn/problem-sets/994805260223102976/problems/994805304020025344 题解 刚开始做很懵逼,可能并不难吧 ...
- idea详细设置:编码、代码提示大小写、窗口数量限制、自动导包、serialID、重复代码警告、热部署等设置
提示: idea ultimate 2018.2 idea-file-setttings设置的是当前项目的配置(只针对当前项目生效)idea-file-others settings相当于以后导入创建 ...
- Web Api(1)
由于在学习Web Api没有了解过MVC,觉得有些吃力.很多基础的东西都会一并记录下来. Web API 的意思是使用HTTP协议并通过网络调用的API. API的意思软件外部接口. 在实际的开发中, ...
- ADO.net 增删改查封装DBhelper
using System; using System.Collections.Generic; using System.Data.SqlClient;//引用数据库客户端 using System. ...
- git clone报错error: RPC failed; curl 18 transfer closed with outstanding read data remaining
具体错误信息如下图: error: RPC failed; curl 18 transfer closed with outstanding read data remaining fatal: ...
- MySQL 关于索引的操作
-- 索引分类? 1.普通索引 2.唯一索引 3.全文索引 4.组合索引 普通索引:仅加速查询,最基本的索引,没有任何限制 唯一索引:加速查询 + 列值唯一(可以有null) 全文索引:仅适用于MyI ...
- IDEA运行有问题debug正常解决方案
朋友们!有没有遇到这样的问题,IDEA运行有问题,debug确是正常的,不经怀疑人生! 不要慌!点击maven,clean一下,再compile一下,就好啦! 不要慌!点击maven,clean一下, ...