Nginx网站服务
1.常见的网站服务
静态网站服务:
Apache服务
nginx服务
动态网站服务:
Tomcat服务
PHP
2.nginx网站服务特点
(1)nginx具有高并发(特别是静态资源)、占用系统资源少等特性。
(2)nginx不但是一个优秀的web软件,还具有反向代理负载均衡和缓存服务功能。
(3)支持多平台部署安装
(4)nginx实现网络通讯时使用的是异步网络IO模型:epoll模型
网络模型:
epoll模型:epoll是Linux内核为处理大批量文件描述符而作了改进的poll,是Linux下多路复用IO接口select/poll的增强版本,它能显著提高程序在大量并发连接中只有少量活跃的情况下的系统CPU利用率。另一点原因就是获取事件的时候,它无须遍历整个被侦听的描述符集,只要遍历那些被内核IO事件异步唤醒而加入Ready队列的描述符集合就行了。epoll除了提供select/poll那种IO事件的水平触发(Level Triggered)外,还提供了边缘触发(Edge Triggered),这就使得用户空间程序有可能缓存IO状态,减少epoll_wait/epoll_pwait的调用,提高应用程序效率。
select模型:select需要遍历监视的文件描述符,并且这个描述符的数组还有最大的限制。随着文件描述符数量的增长,用户态和内核的地址空间的复制所引发的开销也会线性增长。即使监视的文件描述符长时间不活跃了,select还是会线性扫描
3.nginx服务部署安装
(1)yum安装
a.使用官方的yum源进行安装,安装的是最新版本,软件目录结构比价标准(推荐)
http://nginx.org/en/linux_packages.html#RHEL-CentOS
[root@web01 /server/tools]# vim /etc/yum.repos.d/nginx.repo
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1 (#安装有问题改成0或注释掉)
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
[root@web01 /server/tools]# yum install nginx -y
b.使用非官方yum源进行安装,安装的不是最新版本,目录结构会发生变化
更换阿里源,或清华源
[root@web01 /server/tools]# yum install nginx -y
[root@web01 /etc/yum.repos.d]# systemctl start nginx
(2)编译安装
a.下载软件
[root@web01 ~]# mkdir -p /server/tools
[root@web01 /server/tools]# wget http://nginx.org/download/nginx-1.18.0.tar.gz
b.解决软件依赖
[root@web01 /server/tools]# yum install -y openssl-devel pcre-devel
[root@web01 /server/tools]# ./configure --prefix=/root/nginx --user==nginx --group=nginx --with-http_ssl_module --with-http_stub_status_module
ps:如果编译安装软件不知道需要哪些依赖包,可以先继续编译,报错的时候回提示安装依赖包
c.解压软件,进入软件目录
[root@web01 /server/tools]# tar -xf nginx-1.18.0.tar.gz
[root@web01 /server/tools]# ls
nginx-1.18.0 nginx-1.18.0.tar.gz
[root@web01 /server/tools]# cd nginx-1.18.0/
[root@web01 /server/tools/nginx-1.18.0]# ls
auto CHANGES CHANGES.ru conf configure contrib html LICENSE man README src
d.进行编译安装三部曲
进行配置操作
[root@web01 /server/tools/nginx-1.18.0]# ./configure --help
[root@web01 /server/tools/nginx-1.18.0]# ./configure --prefix=/server/tools --user=nginx --group=nginx --with-http_ssl_module参数 含义 --prefix=PATH 指定安装目录 --user=USER 设置一个虚拟用户管理worker进程 --group=GROUP 设置一个虚拟用户组管理worker进程 --error-log-path=PATH 指定错误日志的目录位置 --with-http_ssl_module 实现https访问 --without-http_ssi_module 关闭功能 进行软件的编译
[root@backup ~/nginx-1.18.0]# make
编译安装
[root@backup ~/nginx-1.18.0]# make install
[root@backup ~/nginx-1.18.0]# ll /server/tools/nginx
total 0
drwxr-xr-x 2 root root 333 Sep 16 16:41 conf
drwxr-xr-x 2 root root 40 Sep 16 16:41 html
drwxr-xr-x 2 root root 6 Sep 16 16:41 logs
drwxr-xr-x 2 root root 19 Sep 16 16:41 sbin
[root@backup /server/tools/sbin]# useradd nginx -M -s /sbin/nologin
[root@backup /server/tools/sbin]# id nginx
uid=1004(nginx) gid=1004(nginx) groups=1004(nginx)
[root@backup /server/tools/sbin]# ./nginx
[root@backup /server/tools/sbin]# netstat -lntup | grep nginx
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 31391/nginx: master
[root@backup /server/tools/sbin]# ./nginx -s {reload|stop| quit|reopen|} #重启,停止
4.nginx目录结构
路径信息 | 作用说明 |
---|---|
/etc/logrotate/nginx | 用于日志轮训切割 |
/etc/nginx /etc/nginx/conf.d /etc/nginx/conf.d/default.conf /etc/nginx/nginx.conf | nginx主配置文件 |
/etc/nginx/scgi_params /etc/nginx/uwsgi_params /etc/nginx/fastcgi_params | cgi、fastcgi、uwcgi配置文件 |
/etc/nginx/koi-utf /etc/nginx/koi-win /etc/nginx/win-utf | nginx编码转换映射文件 |
/etc/nginx/mime.types | http协议的content-type与扩展名 |
/usr/lib/systemd/system/nginx-debug.service /usr/lib/systemd/system/nginx.service | nginx服务守护进程管理文件 |
/etc/nginx/modules /usr/lib64/nginx /usr/lib64/nginx/modules | nginx模块目录 |
/usr/sbin/nginx /usr/sbin/nginx-debug | nginx终端管理命令 |
/usr/share/nginx /usr/share/nginx/html /usr/share/nginx/html/50x.html /usr/share/nginx/html/index.html | nginx默认站点目录 |
/var/cache/nginx | nginx缓存目录信息 |
/var/log/nginx | nginx日志信息目录 |
PS:日志切割方法
利用脚本实现切割
#!/bin/bash mv /var/log/nginx/access.log /var/log/nginx/access_$(date +%F).log
systemctl restart nginx利用logrotate进行切割
[root@web01 ~]# egrep -v "^#|^$" /etc/logrotate.conf
weekly --- 定义默认日志切割的周期(月,周,日)
rotate 4 --- 定义只保留几个切割后的文件
create --- 创建出一个相同的源文件
dateext --- 定义角标(扩展名称信息,按照时间)
compress --- 是否对切割后的文件进行压缩处理
include /etc/logrotate.d --- 加载包含/etc/logrotate.d/目录中文件配置
/var/log/wtmp { --- 单独对某个文件进行切割配置
monthly
create 0664 root utmp ——— 切割之后的文件权限,及属主属组
minsize 1M --- 最小大小为1M,小于1M不进行切割
rotate 1
}
/var/log/btmp {
missingok
monthly
create 0600 root utmp
rotate 1
}
5.nginx配置文件默认参数说明
5.1主配置文件
[root@web01 ~]# cat /etc/nginx/nginx.conf
#1.配置文件主区域
user nginx; --- 定义worker进程管理的用户
worker_processes 1; --- 开启几个worker进程(等于CPU核心数或核心数的2倍) error_log /var/log/nginx/error.log warn; --- 错误日志目录
pid /var/run/nginx.pid; --- pid文件位置
#2.配置文件事件区域
events {
worker_connections 1024; --- worker请求接收最大请求数
}
#3.配置http区域
http {
include /etc/nginx/mime.types; --- 加载一个文件类型的配置文件
default_type application/octet-stream; --- 指定默认识别文件类型 log_format main '$remote_addr - $remote_user [$time_local] "$request" ' --- 定义日志格式
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"'; access_log /var/log/nginx/access.log main; --- 定义日志路径 sendfile on;
#tcp_nopush on; keepalive_timeout 65; --- 定义超时时间 #gzip on; include /etc/nginx/conf.d/*.conf; --- 加载站点配置文件
}
5.2站点目录文件
[root@web01 ~]# egrep -v "(^$|#)" /etc/nginx/conf.d/default.conf #4.sever区域配置
server {
listen 80; --- 指定监听端口
server_name localhost; --- 指定网站的域名
location / {
root /usr/share/nginx/html; --- 定义站点目录的路径
index index.html index.htm; --- 定义网站首页文件
}
error_page 500 502 503 504 /50x.html; --- 定义网站错误网页
location = /50x.html {
root /usr/share/nginx/html; --- 定义错网页路径
}
}
6.nginx服务的企业应用
(1)利用nginx搭建一个简单的网站
a.配置nginx官方yum源
[root@web01 /server/tools]# vim /etc/yum.repos.d/nginx.repo
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1 (#安装有问题改成0或注释掉)
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
b.下载安装软件
[root@web01 ~]# yum install nginx -y
c.配置站点文件
[root@web01 /www/share]# cat /etc/nginx/conf.d/www.conf
server{
listen 80;
server_name www.ashuai.com; location / { root /www/share;
index index.html;
}
d.上传网站主页到对应目录中
[root@web01 /www]# tree /www
/www
└── share
└── index.html
f.启动nginx服务
[root@web01 ~]# systemctl start nginx
[root@web01 ~]# netstat -lntup | grep nginx
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 8703/nginx: master
g.配置hosts文件
[root@web01 ~]# vim /etc/hosts
ps:如果是公网IP则在平台添加解析
h.测试
7.企业中虚拟主机访问方式
(1)基于域名的方式进行访问
server{
listen 80;
server_name www.ashuai.com; location / { root /www/share;
index index.html;
}
(2)基于IP地址的方式进行访问(需要重启服务,才能生效restart)
server{
listen 10.0.0.7:80;
server_name www.ashuai.com; location / { root /www/share;
index index.html;
}
(3)基于端口的方式进行访问
server{
listen 8080;
server_name www.ashuai.com; location / { root /www/share;
index index.html;
}
PS:没有相同域名的server主机,会找满足端口要求的第一个主机
8.nginx服务常见模块的应用
模块 | 含义 | 示例 | 对应区域 |
---|---|---|---|
访问安全模块 | |||
ngx_http_access_module | 允许限制对某些客户端地址的访问。 | location / { deny 192.168.1.1; allow 192.168.1.0/24; allow 10.1.1.0/16; allow 2001:0db8::/32; deny all; } | http, server, location, limit_except |
ngx_http_auth_basic_module | 允许通过使用“HTTP基本身份验证”协议验证用户名和密码来限制对资源的访问。 | location / { auth_basic "closed site"; auth_basic_user_file conf/htpasswd; } | http, server, location, limit_except |
ngx_http_autoindex_module | 处理以斜杠字符('/')结尾的请求并生成目录列表。 | location / { autoindex on; } | http, server, location |
ngx_http_stub_status_module | 模块提供对基本状态信息的访问 | location = /basic_status { stub_status; } | server, location |
location | 根据请求URI设置配置。 | location [ = | ~ | ~* | ^~ ] uri { ... } location @name { ... } |
server, location |
ngx_http_auth_basic_module
模块说明:
location / {
auth_basic "closed site"; ------->"closed site":描述信息
auth_basic_user_file password/htpasswd; ------->"conf/htpasswd":密码文件存放目录(最好使用相对路径)
} ##创建密码文件目录
[root@web01 ~]# cd /etc/nginx/
[root@web01 /etc/nginx]# mkdir password
##使用htpasswd创建密码文件
[root@web01 /etc/nginx/conf.d]# yum install httpd-tools -y
[root@web01 /etc/nginx]# htpasswd -bc ./password/htpasswd shuai 123
Adding password for user shuai
[root@web01 /etc/nginx]# cat ./password/htpasswd
shuai:$apr1$AjtERxjc$.IkOME8TUx1jzxn/MhEwb1
#修改密码文件权限
[root@web01 /etc/nginx/password]# chmod 600 htpasswd
[root@web01 /etc/nginx/password]# chown nginx htpasswd
8.1htpasswd参数说明
-c Create a new file. *****
创建一个密码文件
-n Don't update file; display results on stdout.
不会更新文件; 显示文件内容信息
-b Use the password from the command line rather than prompting for it. *****
免交互方式输入用户密码信息
-i Read password from stdin without verification (for script usage).
读取密码采用标准输入方式,并不做检查 ???
-m Force MD5 encryption of the password (default).
md5的加密算法
-B Force bcrypt encryption of the password (very secure).
使用bcrypt对密码进行加密
-C Set the computing time used for the bcrypt algorithm
(higher is more secure but slower, default: 5, valid: 4 to 31).
使用bcrypt algorithm对密码进行加密
-d Force CRYPT encryption of the password (8 chars max, insecure).
密码加密方式
-s Force SHA encryption of the password (insecure).
加密方式
-p Do not encrypt the password (plaintext, insecure).
不进行加密
-D Delete the specified user.
删除指定用户
ngx_http_autoindex_module
模块说明:
[root@web01 /www/share]# mv index.html shuai.html
[root@web01 /www/share]# tree
.
├── shuai01
│ └── test.txt
├── shuai02
│ └── test.txt
└── shuai.html [root@web01 /www/share]# vim /etc/nginx/conf.d/www.conf
server{
listen 80;
server_name www.ashuai.com; location / { root /www/share;
index index.html; #主页文件修改名称或直接删除
auth_basic "shuai";
auth_basic_user_file password/htpasswd;
autoindex on; #开启功能
charset utf-8; #目录中有中文需要设置字符集,不加则是乱码 }
}
#PS:如果文件只打开不下载的话修改媒体资源类型文件。如果只想打开文件查看不下载,则将对应的文件格式添加即可。
[root@web01 /etc/nginx]# cat /etc/nginx/mime.types
ngx_http_stub_status_module
模块说明:
[root@web01 /etc/nginx/conf.d]# vim status.conf
server{
listen 80;
server_name status.shuai.com; location / { stub_status; }
}
8.2监控参数说明
参数 | 说明 |
---|---|
Active connections | 当前活动客户端连接数(包括等待连接数) |
accepts | 接受的客户端连接总数 |
handled | 已处理的连接总数 |
requests | 客户端请求总数 |
Reading | nginx正在读取请求头的当前连接数 |
Writing | nginx将响应写回客户端的当前连接数。 |
Waiting | 当前等待请求的空闲客户端连接数。 |
location
模块说明
location = / { ------>精确匹配,优先级最高
[ configuration A ]
} location / { ------>默认匹配,优先度最低,别的location都不具备匹配条件则匹配/
[ configuration B ]
} location /documents/ { ------>按照目录进行匹配 ,优先级3级
[ configuration C ]
} location ^~ /images/ { ------>优先匹配 ,优先级2级
[ configuration D ]
} location ~* \.(gif|jpg|jpeg)$ { ------>不区分大小写进行匹配 ,优先级3级
[ configuration E ]
}
说明
[root@web01 /etc/nginx/conf.d]# vim test.conf
server{
listen 80;
server_name test.shuai.com;
location = / {
return 404;
} location / {
return 403;
} location /documents/ {
return 501;
} location ^~ /images/ {
return 502;
} location ~* \.(gif|jpg|jpeg)$ {
return 500;
}
(1)访问test.shuai.com
(2)访问http://test.shuai.com/documents/
(3)访问http://test.shuai.com/images/shuai.jpg
9.nginx日志功能
访问日志: /var/log/nginx/access.log
ngx_http_log_module log_format main '$remote_addr - $remote_user [$time_local] "$request" ' #定义日志格式,只能在http模块定义
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"'; access_log /spool/logs/nginx-access.log main buffer=32k; #调用日志格式,可以在http, server, location模块定义,根据不同网站调用不同的日志格式
参数 | 含义 |
---|---|
$remote_addr | 客户端IP地址 |
$remote_user | 显示认证的用户名信息 |
$time_local | 访问网站时间 |
$request | 请求报文的请求行信息 |
$status | 用户访问网站状态码信息 |
$body_bytes_sent | 显示响应的数据尺寸信息 |
$http_referer | 记录调用网站资源的连接地址信息(防止用户盗链) |
$http_user_agent | 记录用户使用什么客户端软件进行访问页面的 (谷歌 火狐 IE 安卓 iphone) |
$http_x_forwarded_for | 负载均衡 |
错误日志: /var/log/nginx/error.log
Syntax: error_log file [level];
Default: error_log logs/error.log error;
Context: main, http, mail, stream, server, location
error_log /var/log/nginx/error.log warn;
级别 | 含义 |
---|---|
debug | 调试级别, 服务运行的状态信息和错误信息详细显示 |
info | 信息级别, 只显示重要的运行信息和错误信息 |
notice | 通知级别: 更加重要的信息进行通知说明 |
warn | 警告级别: 可能出现了一些错误信息,但不影响服务运行 |
error | 错误级别: 服务运行已经出现了错误,需要进行纠正 (推荐选择) |
crit | 严重级别: 必须进行修改调整 |
alert | 严重警告级别: 即警告,而且必须进行错误修改 |
emerg | 灾难级别: 服务已经不能正常运行 |
PS:日志文件信息需要提前做切割处理
10.rewrite跳转
[root@web01 /etc/nginx/conf.d]# cat www.conf
server{
listen 80;
server_name ashuai.com;
rewrite ^/(.*) http://www.ashuai.com/$1 permanent;
}
server{
listen 80;
server_name www.ashuai.com; location / { root /www/share;
index index.html;
# auth_basic "shuai";
# auth_basic_user_file password/htpasswd;
autoindex on;
charset utf-8; } }
Nginx网站服务的更多相关文章
- 部署Nginx网站服务实现访问状态统计以及访问控制功能
原文:https://blog.51cto.com/11134648/2130987 Nginx专为性能优化而开发,最知名的优点是它的稳定性和低系统资源消耗,以及对HTTP并发连接的高处理能力,单个物 ...
- Nginx网站服务 配置
Nginx网站服务 配置 1.编译安装Nginx服务 2.认识Nginx服务的主配置文件nginx.conf 3.访问状态统计配置 4.基于授权的访问控制 5.基于客户端的访问控制 6.基于域名的Ng ...
- 八.nginx网站服务实践应用
期中集群架构-第八章-期中架构nginx章节====================================================================== 01. web ...
- 部署Nginx网站服务
编译安装Nginx nginx 官方 : http://nginx.org/ yum -y install pcre-devel zlib-devel ##安装相关依赖包 ./configure ...
- Nginx静态服务,域名解析
安装这里就不写了在LNMP里有具体的安装 1.1 常用来提供静态Web服务的软件有如下三种: Apache:这是中小型Web服务的主流,Web服务器中的老大哥. Nginx:大型网 ...
- Nginx网站部署
Nginx网站服务部署 常用的网站服务软件 处理静态资源的服务: apache软件:https://apache.org/ nginx软件:https://nginx.org/ 处理动态资源的服务: ...
- 为苹果ATS和微信小程序搭建 Nginx + HTTPS 服务
昨天测试开发微信小程序,才发现微信也要求用HTTPS加密数据,想来是由于之前苹果的ATS审核政策的缘故吧,微信想在苹果上开放小程序必然也只能要求开发者必须使用HTTPS了,于是在服务器上测试安装Ngi ...
- 《linux就该这么学》第十二节课:第10章,Apache网站服务
第十章 10.1.网站服务程序 (让用户能够通过网站访问服务器上的资源) 目前提供的网站服务有IIS,Nginx,Apache等,IIS是windows中默认的web服务程序. Nginx是后起之秀, ...
- Nginx缓存服务
Nginx缓存服务 1.缓存常见类型 2.缓存配置语法 3.缓存配置实践 4.缓存清理实践 5.部分页面不缓存 6.缓存日志记录统计 通常情况下缓存是用来减少后端压力, 将压力尽可能的往前推, 减少后 ...
随机推荐
- 性能工具 stream 最新版本5.10 The STREAM benchmark
官网下载最新性能工具 stream 最新版本5.10 https://github.com/jeffhammond/STREAM 官网下载最新性能工具 stream 最新版本5.10 http:/ ...
- Python检查 文件备份是否正常 云备份进程是否正常运行
场景:服务器自动备份数据库文件,每两小时生成一个新备份文件,通过云备份客户端自动上传,需要每天检查是否备份成功. 实现:本脚本实现检查文件是否备份成功,进程是否正常运行,并且发送相关邮件提醒. #! ...
- Linux 忘记密码解决方法——RedHat
[RedHat7.4版本] 1.将忘记密码的rhel7.4版本的虚拟机打开 2.等3秒左右出现这个画面时,用方向键,将光标移动到第二栏处,接着按"e"键 3.接在在linux16这 ...
- shell基础之更改IP
要求: 显示所有网卡及其对应的IP地址,并可更改IP相关内容使其生效. 1 #!/bin/bash 2 #获取本机网卡和IP 3 while : 4 do 5 network=$(ifconfig | ...
- Docker无法正常启动的原因及解决办法
一.Docker启动异常表现: 1.状态反复restaring,用命令查看 $docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS ...
- 大数据学习之路——MySQL基础(一)——MySQL的基础知识与常见操作
一.存储引擎 1.含义 存储引擎是数据库底层软件组织,数据库管理系统(DBMS)使用数据引擎进行创建.查询.更新和删除数据.不同的存储引擎提供不同的存储机制.索引技巧.锁定水平等功能,使用不同的存储引 ...
- 信息学C++教程<-3->输入输出格式控制
二进制输出整数 在计算机系统内的数据本身就是二进制 思考:在C++中,如何通过cout函数来输出二进制的数字呢? 所需库文件:1.iomanip //管理C++格式控制 2.bitset //二进 ...
- python 获取当天和前几天时间数据
python 获取当天和前几天时间数据 import datetime from datetime import datetime, date, timedelta def dayDateRange( ...
- CVPR2019论文看点:自学习Anchor原理
CVPR2019论文看点:自学习Anchor原理 原论文链接:https://arxiv.org/pdf/1901.03278.pdf CVPR2019的一篇对anchor进行优化的论文,主要将原来需 ...
- RGB-D相机视觉SLAM
RGB-D相机视觉SLAM Dense Visual SLAM for RGB-D Cameras 开源代码地址: vision.in.tum.de/data/software/dvo 摘要 本文提 ...