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网站服务的更多相关文章

  1. 部署Nginx网站服务实现访问状态统计以及访问控制功能

    原文:https://blog.51cto.com/11134648/2130987 Nginx专为性能优化而开发,最知名的优点是它的稳定性和低系统资源消耗,以及对HTTP并发连接的高处理能力,单个物 ...

  2. Nginx网站服务 配置

    Nginx网站服务 配置 1.编译安装Nginx服务 2.认识Nginx服务的主配置文件nginx.conf 3.访问状态统计配置 4.基于授权的访问控制 5.基于客户端的访问控制 6.基于域名的Ng ...

  3. 八.nginx网站服务实践应用

    期中集群架构-第八章-期中架构nginx章节====================================================================== 01. web ...

  4. 部署Nginx网站服务

    编译安装Nginx nginx 官方 : http://nginx.org/ yum -y install pcre-devel zlib-devel   ##安装相关依赖包 ./configure ...

  5. Nginx静态服务,域名解析

    安装这里就不写了在LNMP里有具体的安装 1.1 常用来提供静态Web服务的软件有如下三种:     Apache:这是中小型Web服务的主流,Web服务器中的老大哥.     Nginx:大型网 ...

  6. Nginx网站部署

    Nginx网站服务部署 常用的网站服务软件 处理静态资源的服务: apache软件:https://apache.org/ nginx软件:https://nginx.org/ 处理动态资源的服务: ...

  7. 为苹果ATS和微信小程序搭建 Nginx + HTTPS 服务

    昨天测试开发微信小程序,才发现微信也要求用HTTPS加密数据,想来是由于之前苹果的ATS审核政策的缘故吧,微信想在苹果上开放小程序必然也只能要求开发者必须使用HTTPS了,于是在服务器上测试安装Ngi ...

  8. 《linux就该这么学》第十二节课:第10章,Apache网站服务

    第十章 10.1.网站服务程序 (让用户能够通过网站访问服务器上的资源) 目前提供的网站服务有IIS,Nginx,Apache等,IIS是windows中默认的web服务程序. Nginx是后起之秀, ...

  9. Nginx缓存服务

    Nginx缓存服务 1.缓存常见类型 2.缓存配置语法 3.缓存配置实践 4.缓存清理实践 5.部分页面不缓存 6.缓存日志记录统计 通常情况下缓存是用来减少后端压力, 将压力尽可能的往前推, 减少后 ...

随机推荐

  1. 性能工具 stream 最新版本5.10 The STREAM benchmark

    官网下载最新性能工具 stream 最新版本5.10 https://github.com/jeffhammond/STREAM 官网下载最新性能工具 stream 最新版本5.10   http:/ ...

  2. Python检查 文件备份是否正常 云备份进程是否正常运行

    场景:服务器自动备份数据库文件,每两小时生成一个新备份文件,通过云备份客户端自动上传,需要每天检查是否备份成功. 实现:本脚本实现检查文件是否备份成功,进程是否正常运行,并且发送相关邮件提醒. #! ...

  3. Linux 忘记密码解决方法——RedHat

    [RedHat7.4版本] 1.将忘记密码的rhel7.4版本的虚拟机打开 2.等3秒左右出现这个画面时,用方向键,将光标移动到第二栏处,接着按"e"键 3.接在在linux16这 ...

  4. shell基础之更改IP

    要求: 显示所有网卡及其对应的IP地址,并可更改IP相关内容使其生效. 1 #!/bin/bash 2 #获取本机网卡和IP 3 while : 4 do 5 network=$(ifconfig | ...

  5. Docker无法正常启动的原因及解决办法

    一.Docker启动异常表现: 1.状态反复restaring,用命令查看 $docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS ...

  6. 大数据学习之路——MySQL基础(一)——MySQL的基础知识与常见操作

    一.存储引擎 1.含义 存储引擎是数据库底层软件组织,数据库管理系统(DBMS)使用数据引擎进行创建.查询.更新和删除数据.不同的存储引擎提供不同的存储机制.索引技巧.锁定水平等功能,使用不同的存储引 ...

  7. 信息学C++教程<-3->输入输出格式控制

    二进制输出整数 在计算机系统内的数据本身就是二进制 思考:在C++中,如何通过cout函数来输出二进制的数字呢? 所需库文件:1.iomanip //管理C++格式控制 ​ 2.bitset //二进 ...

  8. python 获取当天和前几天时间数据

    python 获取当天和前几天时间数据 import datetime from datetime import datetime, date, timedelta def dayDateRange( ...

  9. CVPR2019论文看点:自学习Anchor原理

    CVPR2019论文看点:自学习Anchor原理 原论文链接:https://arxiv.org/pdf/1901.03278.pdf CVPR2019的一篇对anchor进行优化的论文,主要将原来需 ...

  10. RGB-D相机视觉SLAM

    RGB-D相机视觉SLAM Dense Visual SLAM for RGB-D Cameras 开源代码地址:  vision.in.tum.de/data/software/dvo 摘要 本文提 ...