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组成

Scheme     方案  访问服务器以获取资源时要使用哪种协议

user       用户  某些方案访问资源时需要的用户名

password   密码  用户对应的密码,中间用:分隔

scheme     方案  访问服务器以获取资源时要使用哪种协议

host       主机  资源宿主服务器的主机名或IP地址

port       端口  资源宿主服务器正在监听的端口号,很多方案有默认端口号

path       路径  服务器资源的本地名,由一个/将其与前面的URL组件分隔

params     参数  指定输入的参数,参数为名/值对,多个参数,用;分隔 query      查询  传递参数给程序,如数据库,用?分隔,多个查询用&分隔

frag       片段  一小片或一部分资源的名字,此组件在客户端使用 用#分隔

HTTP简介

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

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

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

 4.https://developer.mozilla.org/zh-CN/docs/Web

http工作机制

一次http事务包括: ①http请求:http request ②http响应: http response

Web资源: web resource

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

资源类型:

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

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

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

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

web中常用的语言介绍

html语言 超文本标记语言

http访问请求完整过程

  1. 建立连接:         TCP的3次握手建立链接,向服务器发送http请求,服务器拒绝或允许    
  2. .接受请求           接受客户端请求报文对某个资源的一次请求过程web响应访问模型         
  3. 处理请求:  服务器对请求报文进行解析,并获取请求的资源及请求方法等相关信息,根据方法,资源,首部和可选 的主体部分对请求进行处理常用请求Method: GET、POST、HEAD、PUT、DELETE、TRACE、OPTIONS               
  4. 访问资源:  服务器获取请求报文中请求的资源web服务器,即存放了web资源的服务器,负责向请求者提供对方请求 的静态资源,或动态运行后生成的资源 .构建响应报文:                                                                
  5.  一旦Web服务器识别除了资源,就执行请求方法中描述的动作,并返回响应报文。响应报文中包含有响 应状态码、响应首部,如果生成了响应主体的话,还包括响应主体   
  6. 响应实体:如果事务处理产生了响应主体,就将内容放在响应报文中回送过去。响应报文中通常包括:    描述了响应主体MIME类型的Content-Type首部  描述了响应主体长度的Content-Length    实际报文的主体内容 2)URL重定向:web服务构建的响应并非客户端请求的资源,而是资源另外一个访问路径        3)MIME类型:Web服务器要负责确定响应主体的MIME类型。多种配置服务器的方法可将MIME类型 与资源管理起来                                       
  7.  发送响应报文              Web服务器通过连接发送数据时也会面临与接收数据一样的问题。服务器可能有很多条到各个客户端的 连接,有些是空闲的,有些在向服务器发送数据,还有一些在向客户端回送响应数据。服务器要记录连 接的状态,还要特别注意对持久连接的处理。对非持久连接而言,服务器应该在发送了整条报文之后, 关闭自己这一端的连接。对持久连接来说,连接可能仍保持打开状态,在这种情况下,服务器要正确地 计算Content-Length首部,不然客户端就无法知道响应什么时候结束  

http协议报文头部结构       

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

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

首部行通常用键值表示

空格

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

开始行中的请求方法:

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

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

首部行通常用键值表示

空格

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

状态代码

web服务的配置详解

web服务的常用种类

Apache      Nginx      openresty       大厂自研

Nginx的安装

开源版本的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配置文件内容详解

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            

     location = /50x.html { root   } } /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;

      }

}      

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

     ]# vim /etc/hosts

172.25.254.100 bbs.easylee.org news.easylee.org

web服务器的访问控制

基于IP的访问控制

]# mkdir -p /usr/share/nginx/vhostroot/bbs/html/admin

]# echo admin pape > /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;

     }

}

在100中访问

]# curl bbs.easylee.org/admin/

admin page

在其他主机中访问

] curl bbs.easylee.org/admin/

403 Forbidden


nginx/1.24.0

基于认证的访问控制

]# 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

htpasswd -c 表示新建认证文件,无论认证文件存不存在

当认证文件存在时加-c参数会把认证文件之前的内容全部清空 

设置认证访问控制  

]# 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;

   }

}

未输入用户密码

]# curl bbs.easylee.org/admin/

401 Authorization Required


nginx/1.24.0

输入用户没密码

]# curl bbs.easylee.org/admin/ -uadmin:lee

admin page

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

  • 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之间

SSL 是“Secure Sockets Layer”的缩写,中文叫做“安全套接层”。它是在上世纪90年代中期,由网景 公司设计的。到了1999年,SSL 应用广泛,已经成为互联网上的事实标准。IETF 就把SSL 标准化。 标准化之后SSL被改为 TLS(Transport Layer Security传输层安全协议)

部署https

]# 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 []:lee@easylee.org

我们生成的证书需要通过CA机构认证才能投入生产环境中

CA就是一个公认的公证单位,你可以自行产生一把密钥且制作出必要的证书数据并向CA单位注册, 那么当客户端的浏览器在浏览时,该浏览器会主动向CA单位确认该证书是否为合法注册过,如果 是,那么该次连接才会建立,如果不是,浏览器会发出警告信息,告知用户应避免建立连接

配置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;

     }

}

当开启https后客户一般情况下不会在浏览器中特别添加https去访问,

我们需要强制客户在访问某些站点时使用加密

]# vim vhost_name.conf

server {

       listen 80;

       server_name login.easylee.org;

        rewrite ^/(.*)$ https://login.easylee.org/$1 permanent;

}

^/(.*)$    这时正则表达式语法表示匹配浏览器地址栏中的所有内容

$1        login.easylee.org/xxx 这个地址转换时保留xxx

Permanent   表示永久转换301

搭建动态网站

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

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

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

生成php测试页

]# mkdir -p /usr/share/nginx/html/php

]# vim /usr/share/nginx/html/php/index.php

<?php

  phpinfo();

?>

配置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;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值