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. Azure DevOps(一)利用Azure DevOps Pipeline 构建应用程序镜像到AWS ECR

    一,引言 最近项目上让开始学习AWS,作为一名合格的开发人员,当然也是学会利用Azure DevOps Pipeline 将应用程序部署到 AWS ECS(完全托管的容器编排服务).我们要学会将应用程 ...

  2. 用python输出未来时间,递增

    输入当前时间,之前与之后的365天时间日期 按格式化输出 #!/usr/bin/evn python # -*- coding: UTF-8 -*- # import time import date ...

  3. Docker Swarm(七)Scale 扩(缩)容服务

    扩(缩)容服务 扩容服务 Service还提供了复制(类似kubernetes里的副本)功能.可以通过 docker service scale 命令来设置服务中容器的副本数: docker serv ...

  4. Python基础 小白[7天]入门笔记

    笔记来源 Day-1 基础知识(注释.输入.输出.循环.数据类型.随机数) #-*- codeing = utf-8 -*- #@Time : 2020/7/11 11:38 #@Author : H ...

  5. jmeter while控制器踩坑

    在使用jmeter测试一个复杂流程,需要用到while控制器,对于里面的contition,使用jexl3方式,怎么看都没有问题,可是死活跳不出流程,各种莫名其妙的报错,甚至用单个写死的变量(已设置为 ...

  6. linux命令--使用fsck修复文件系统

    使用fsck修复文件系统错误 1.问题描述 服务器maint_samba 由于服务器maint_samba (debian操作系统)没有正常关机,在重新启动过程中/dev/sdb1出现文件系统错误,需 ...

  7. TODO不实现会报错

    kotlin.NotImplementedError: An operation is not implemented: Not yet implemented 会发生--当你 override fu ...

  8. python类属性和实例属性的访问

  9. Python中PyQuery库的使用

    pyquery库是jQuery的Python实现,可以用于解析HTML网页内容,我个人写过的一些抓取网页数据的脚本就是用它来解析html获取数据的. 它的官方文档地址是:http://packages ...

  10. 【补档_STM32单片机】脉搏波采集显示硬件设计

    一.脉搏波简介 ​ 脉搏一般情况下指的都是动脉脉搏.每分钟的脉搏次数称为脉率,正常情况下与心率是一致的.心脏的一次收缩和舒张成为一个心动周期.在每个心动周期内,心室的收缩和舒张会引起脉内压力的周期性波 ...