Linux笔记8 web服务器的部署及优化

用户常用关于web的信息

www概念

www是world wide web的缩写,及万维网,也就是全球信息广播的意思

通常说的上网就是使用www来查询用户所需要的信息。

www可以结合文字、图形、影像以及声音等多媒体,超链接的方式将信息以Internet传递到世界各 处去。

当你连接www网站,该网站会提供一些数据,客户端要使用可以解析这些数据的软件来处理,那就 是浏览器

网址

URI:Uniform Resource Identifier统一资源标识,分为URL和URN

URN:Uniform Resource Naming,统一资源命名,P2P下载使用的磁力链接是URN的一种实现 

URL:Uniform Resorce Locator,统一资源定位符用于描述某服务器某特定资源位置 两者区别:而URL提供查找该事物的方法。URN仅用于命名,而不指定地址

URL组成

URL组成机构如下:

://:@:/:?#

 每部分的定义为:

scheme 方案 访问服务器以获取资源时要使用哪种协议
user 用户 某些方案访问资源时需要的用户名
password 密码 用户对应的密码,中间用:分隔
host 主机 资源宿主服务器的主机名或IP地址
port 端口 资源宿主服务器正在监听的端口号,很多方案有默认端口号
path 路径 服务器资源的本地名,由一个/将其与前面的URL组件分隔
params 参数 指定输入的参数,参数为名/值对,多个参数,用“;”分隔
query 查询 传递参数给程序,如数据库,用?分隔,多个查询用&分隔
frag 片段 一小片或一部分资源的名字,此组件在客户端使用,用#分隔

HTTP简介

http概念

HTTP协议:全称为Hyper Text Transfer Protocol(超文本传输协议)

简单来说http就是从服务器传输超文本(html)到本地浏览器的传输协议

HTTP协议工作于B/S架构上,浏览器作为HTTP客户端通过URL向HTTP服务端即WEB服务端发送请 求(Request)Web服务端根据接收到的请求数据后,向客户端发送响应信息(Response)如: https://developer.mozilla.org/zh-CN/docs/Web

工作机制

一次http事务包括: http请求:http request

                             http响应: http response

Web资源: web resource

一个网页由多个资源(文件)构成,打开一个页面,通常会有多个资源展示出来,但是每个资源都要单独请 求。因此,一个"Web页面”通常并不是单个资源,而是一组资源的集合

资源类型:

静态文件:无需服务端做出额外处理,服务器端和客户端的文件内容相同

常见文件后缀:.html,.txt,.jpg,.js,.css,mp3,avi

动态文件:服务端执行程序,返回执行的结果,服务器端和客户端的文件内容不相同

常见文件后缀:.php,jsp,asp

web中常用的语言介绍

html语言 超文本标记语言

HTML语言

欢迎!

Baidu 百度百度一下,你就知道

 css 层叠样式表 表述网站的风格

html网页主体

---

这是 heading 1

这是一段普通的段落。请注意,该段落的文本是红色的。在body选择器中定义了本页面中的默认文本颜色。

该段落定义了class="ex".该段落中的文本是蓝色的。

css文件

---

body {color:red }

h1 {color:yellow }

p.ex {color:blue }

js实现html和css实现不了的功能比如动画效果

你好!

mine(Multipurpose Internet Mail Extensions)多用途因特网邮件扩展

它设计的最初目的是为了在发送电子邮件时附加多媒体数据,让邮件客户程序能根据其类型进行处 理

为了支持多媒体数据类型,HTTP协议中就使用了附加在文档之前的MIME数据类型信息来标识数据 类型。

其主要功能是让服务器将它们发送的多媒体数据的类型告诉浏览器

服务器将MIME标志符放入传送的数据中来告诉浏览器使用哪种插件读取相关文件

MIME类型存在于HTTP响应报文的响应头部信息里,它是一种文本标记

MIME格式: type/subtype 文件类型后缀(html txt jpg png... ...)

MIMI类型 文件类型
text/htm html、htm、shtml文本类型
text/css css文本类型
text/xml xml文本类型
image/gif gif图像类型
image/jpeg jpeg、jpg图像类型
application/javascript js文本类型
text/plain txt文本类型
application/json json文本类型
video/mp4 mp4视频类型
video/quicktime mov视频类型
video/x-flv flv视频类型
video/x-ms-wmv wmv视频类型
video/x-msvideo avi视频类

http访问请求完整过程

1.建立连接:

TCP的3次握手建立链接,向服务器发送http请求,服务器拒绝或允许

2.接受请求

接受客户端请求报文对某个资源的一次请求过程web响应访问模型

a.单进程I/O模型:启动一个进程处理用户请求,而且一次只处理一个,多个请求被串行响应 b.多进程I/O模型:并行启动多个进程,每个进程响应一个连接请求

c.复用I/O结构:启动一个进程,同时响应N个连接请求

d.复用的多进程I/O模型:启动M个进程,每个进程响应N个连接请求,同时接收M*N个请求

3.处理请求:

服务器对请求报文进行解析,并获取请求的资源及请求方法等相关信息,根据方法,资源,首部和可选 的主体部分对请求进行处理常用请求Method: GET、POST、HEAD、PUT、DELETE、TRACE、OPTIONS

4.访问资源:

服务器获取请求报文中请求的资源web服务器,即存放了web资源的服务器,负责向请求者提供对方请求 的静态资源,或动态运行后生成的资源

5.构建响应报文:

一旦Web服务器识别除了资源,就执行请求方法中描述的动作,并返回响应报文。响应报文中包含有响 应状态码、响应首部,如果生成了响应主体的话,还包括响应主体

响应实体:如果事务处理产生了响应主体,就将内容放在响应报文中回送过去。响应报文中通常包括:

描述了响应主体MIME类型的Content-Type首部

描述了响应主体长度的Content-Length

实际报文的主体内容

        2)URL重定向:web服务构建的响应并非客户端请求的资源,而是资源另外一个访问路径         3)MIME类型:Web服务器要负责确定响应主体的MIME类型。多种配置服务器的方法可将MIME类型与资源管理起来

6发送响应报文

Web服务器通过连接发送数据时也会面临与接收数据一样的问题。服务器可能有很多条到各个客户端的 连接,有些是空闲的,有些在向服务器发送数据,还有一些在向客户端回送响应数据。服务器要记录连 接的状态,还要特别注意对持久连接的处理。对非持久连接而言,服务器应该在发送了整条报文之后, 关闭自己这一端的连接。对持久连接来说,连接可能仍保持打开状态,在这种情况下,服务器要正确地 计算Content-Length首部,不然客户端就无法知道响应什么时候结束

http协议报文头部结构

请求报文

求情报文由三部分组成即:开始行、首部行、是体主体

开始行:请求方法 url 版本 CRLF

首部行通常用键值表示

空格

实体主题数据,一般在post动作中可以提看到

开始行中的请求方法:

方法 描述
GET 请求指定页面信息,并返回实体主体
HEAD 类似get要求,只不过返回相应中没有主题内容,用户获取报头
POST 向指定资源提交数据请求,数据包含在请求中,此请求可能会生成新的资源或修改已 有资源
PUT 从客户端向服务端传送数据取代指定的文档内容
DELETE 请求服务器删除指定页面
CONNECT HTTP/1.1协议中预留给弄够将改为管道方式的代理服务器
OPTIONS 允许客户端查看服务器的性能
TRACE 回显服务器收到的请求,用于测试和诊断

响应报文

Linux笔记8 web服务器的部署及优化_第1张图片

求情报文由三部分组成即:开始行、首部行、是体主体

开始行:http版本 状态码 短语 CRLF

首部行通常用键值表示

空格

实体主题数据,即获取内容

状态代码

状态码由三位数字组成,第一个数字定义了响应的类别,且有五种可能取值

状态码 含义 详解
1xx 指示信息 表示请求已接收,继续处理
2xx 成功 表示请求已被成功接收、理解、接受
3xx 重定向 要完成请求必须进行更进一步的操作
4xx 客户端错误 请求有语法错误或请求无法实现
5xx 服务器端错误 服务器未能实现合法的请求

常见状态代码、状态描述的说明如下:

状态码 含义
200 OK 客户端请求成功
400 Bad Request 客户端请求有语法错误,不能被服务器所理解
401 Unauthorized 请求未经授权,这个状态代码必须和 WWW-Authenticate报头域一起 使用
403 Forbidden 服务器收到请求,但是拒绝提供服务
404 Not Found 请求资源不存在,举个例子:输入了错误的URL
500 Internal Server Error 服务器发生不可预期的错误
503 Server Unavailable 服务器当前不能处理客户端的请求,一段时间后可能恢复正常

web服务的配置详解

web服务的常用种类

开源版本的Nginx官网:http://nginx.org

Nginx在安装的过程中可以选择源码安装也可以选择使用软件包安装

源码安装下载相应的源码压缩包解压后编译完成安装

软件安装包可以使用rpm或者apt命令进行安装,也可以使用dnf通过软件仓库安装

以软件仓库安装为例:

配置软件仓库

]# vim /etc/yum.repos.d/nginx.repo

[nginx]

name=nginx

baseurl=http://nginx.org/packages/rhel/9/x86_64

gpgcheck=0

执行安装命令

 ]# dnf install nginx –y

启动服务并启用服务

]# systemctl enable --now nginx.service

]# firewall-cmd --permanent --add-service=http

]# firewall-cmd –reload

注意: 在安装nginx之前还要配置好系统的软件仓库,nginx的安装需要通过系统软件仓库来解决依赖性

Nginx涉及到的文件

相关配置文件的作用

主配置目录:/etc/nginx

相关配置文件:/etc/nginx/

├── conf.d #子配置目录

│ ├── default.conf #子配置文件

├── fastcgi_params #fastcgi变量文件,用于识别php

├── mime.types   #媒体类型文件

├── nginx.conf #主配置文件

├── scgi_params   #scgi变量文件,用于识别perl

└── uwsgi_params   #uwsgi变量文件,用于识别python

/var/log/nginx #日志文件

nginx配置文件内容详解

nginx全局配置

user nginx;                                #nginx程序运行用户
worker_processes auto;                     #开启work进程数量

error_log /var/log/nginx/error.log notice; #错误日志
pid       /var/run/nginx.pid;              #pid文件

events {
   worker_connections 1024;                #可接受最大连接数
}

http模块配置

http {
   include       /etc/nginx/mime.types; #可解析的静态资源类型
   default_type application/octet-stream; #用来配置Nginx响应前端请求默认的MIME类
型

   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; # Nginx服务器是否使用sendfile()传输文件
   #tcp_nopush     on; # 当包累计到一定大小后就发送,默认0.2s一次
   keepalive_timeout 65; # 长连接超时时间
#gzip on; #可以使网站的css、js 、xml、html 等静态资源在传输时
进行压缩
   include /etc/nginx/conf.d/*.conf; #指定子配置文件
}

子配置文件

/etc/nginx/conf.d/default.conf
server {
   listen       80; #监听端口
   server_name localhost; #服务器的名字
   location / {
       root   /usr/share/nginx/html; #默认发布目录
       index index.html index.htm; #默认发布文件
   }
   #error_page 404             /404.html;
   # redirect server error pages to the static page /50x.html
   #
   error_page   500 502 503 504 /50x.html; #访问出错呈现错误页面
   location = /50x.html {
       root   /usr/share/nginx/html;
}
}

Nginx配置

nginx虚拟主机

默认情况下nginx只能发布一个站点

如果要发布多个站点需要搭建多台nginx来满足,如果这样会浪费太多资源

为解决上述问题,启用nginx的虚拟主机即可

虚拟主机有两种模式,基于IP或者基于域名

基于IP的虚拟主机

]# ip addr add 172.25.254.111/24 dev ens160
]# ip addr add 172.25.254.222/24 dev ens160
]# mkdir -p /usr/share/nginx/vhostroot/{111,222}/html
]# echo 172.25.254.111 > /usr/share/nginx/vhostroot/111/html/index.html
]# echo 172.25.254.222 > /usr/share/nginx/vhostroot/222/html/index.html
]# vim vhost_ip.conf
server{
 listen 172.25.254.111:80;
 location / {
   root /var/www/virtualdir/111/html;
   index index.html index.htm
 }
}
server{
 listen 172.25.254.222:80;
 location / {
   root /var/www/virtualdir/222/html;
   index index.html index.htm
 }
}
]# curl 172.25.254.222:8080
172.25.254.222
]# curl 172.25.254.111
172.25.254.111

基于域名的虚拟主机

]# mkdir -p /usr/share/nginx/vhostroot/{bbs,news}/html
]# echo news.easylee.org > /usr/share/nginx/vhostroot/news/html/index.html
]# echo bbs.easylee.org > /usr/share/nginx/vhostroot/bbs/html/index.html
]# vim vhost_name.conf
server {
 listen 80;
 server_name bbs.easylee.org;
 location / {
   root /usr/share/nginx/vhostroot/bbs/html;
   index index.html index.htm;
 }
}
server {
 listen 80;
 server_name news.easylee.org;
 location / {
   root /usr/share/nginx/vhostroot/bbs/html;
   index index.html index.htm;
 }
}

测试:

[root@localhost conf.d]# curl news.easylee.org
news.easylee.org
[root@localhost conf.d]# curl bbs.easylee.org
news.easylee.org

注意:在测试时因为虚拟主机是基于域名的,执行测试命令的主机需要做本地解析

]# vim /etc/hosts

172.25.254.100 bbs.easylee.org news.easylee.org

web服务器的访问控制

基于IP的访问控制

1.设置访问控制

]# mkdir -p /usr/share/nginx/vhostroot/bbs/html/admin
]# echo admin page > /usr/share/nginx/vhostroot/bbs/html/admin/index.html
]# vim vhost_name.conf
server {
 listen 80;
 root /usr/share/nginx/vhostroot/bbs/html;
 index index.html index.htm;
 server_name bbs.easylee.org;
 location / {
 }
 location /admin/ {
   allow 172.25.254.100;
   deny all;
 }
}

2.测试

在100中访问
]# curl bbs.easylee.org/admin/
admin page
在其他主机中访问
] ➤ curl bbs.easylee.org/admin/

403 Forbidden

403 Forbidden


nginx/1.24.0

基于认证的访问控制

1.建立认证文件按

]# yum install httpd-tools-2.4.57-5.el9.x86_64 -y
]# htpasswd -cm /etc/nginx/.htpasswd admin
New password:
Re-type new password:
Adding password for user admin

2.设置认证访问控制

]# vim vhost_name.conf
server {
 listen 80;
 root /usr/share/nginx/vhostroot/bbs/html;
 index index.html index.htm;
 server_name bbs.easylee.org;
 location / {
 }
 location /admin/ {
   auth_basic on;
   auth_basic_user_file /etc/nginx/.htpasswd;
 }
}

3.测试

未输入用户密码
]# curl bbs.easylee.org/admin/

401 Authorization Required

401 Authorization Required


nginx/1.24.0
输入用户没密码 ]# curl bbs.easylee.org/admin/ -uadmin:lee admin page

web服务器的数据加密(https)

http简介

HTTP协议以明文方式发送内容,不提供任何方式的数据加密,

HTTP协议不适合传输一些敏感信息,比如信用卡号、密码等

为了解决HTTP协议的这一缺陷,需要使用另一种协议:安全套接字层超文本传输协议HTTPS。 HTTPS全称:Hyper Text Transfer Protocol over Secure Socket Layer ),是以安全为目标的 HTTP通道

HTTPS并不是一个新协议,而是HTTP+SSL(TLS)

原本HTTP先和TCP直接通信,而加了SSL后,就变成HTTP先和SSL通信,再由SSL和TCP通信相当于 SSL被嵌在了HTTP和TCP之间

部署https

1.生成密钥

]# mkdir -p /etc/nginx/certs
]# openssl req -newkey rsa:2048 -nodes -sha256 \ 
-keyout /etc/nginx/certs/easylee.org.key -x509 -days 365 \
-out /etc/nginx/certs/easylee.org.crt
--------------------------------------
按照提示填入相应信息
Country Name (2 letter code) [XX]:CN
State or Province Name (full name) []:Shannxi
Locality Name (eg, city) [Default City]:Xi'An
Organization Name (eg, company) [Default Company Ltd]:easylee
Organizational Unit Name (eg, section) []:web
Common Name (eg, your name or your server's hostname) []:www.easylee.org
Email Address []:[email protected]

2.配置nginx开启https功能

]# mkdir /usr/share/nginx/vhostroot/login/html -p
]# echo login.easylee.org > /usr/share/nginx/vhostroot/login/html/index.html
]# vim vhost_name.conf
server {
 listen 443 ssl;
 server_name login.easylee.org;
 ssl_certificate     /etc/nginx/certs/easylee.org.crt;
 ssl_certificate_key /etc/nginx/certs/easylee.org.key;
 ssl_protocols       TLSv1 TLSv1.1 TLSv1.2;
 ssl_ciphers         HIGH:!aNULL:!MD5;
 location / {
   root /usr/share/nginx/vhostroot/login/html;
   index index.html index.htm;
 }
}

3.强制访问加密

利用从定向的办法来强制客户使用加密访问方式

]# vim vhost_name.conf
server {
 listen 80;
 server_name login.easylee.org;
 rewrite ^/(.*)$ https://login.easylee.org/$1 permanent;
}

搭建动态网站

动态网站指网站内容可根据不同情况动态变更的网站,一般情况下动态网站通过数据库进行架构。

动态网站除了要设计网页外,还要通过数据库和编程序来使网站具有更多自动的和高级的功能。

动态网页:使用网页脚本语言,比如php、JSP等,通过脚本将网站内容动态存储到数据库,用户访 问网站是通过读取数据库来动态生成网页的方法

配置web服务器对php站点的支持

1.生成php测试页

]# mkdir -p /usr/share/nginx/html/php
]# vim /usr/share/nginx/html/php/index.php

2.配置web服务器对php页面的发布

server {
   listen       80;
   server_name localhost;
   location ~ \.php$ {
       root /usr/share/nginx/html/php;
       fastcgi_pass unix:/run/php-fpm/www.sock;
       fastcgi_index index.php;
       fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
       include fastcgi_params;
   }
}

你可能感兴趣的:(笔记,linux)