WEB服务器的部署及优化 --Linux中

时间:2024-12-06 13:59:07

WEB服务器的部署及优化

1. 用户常用的关于web的信息

1.1 什么是www

  • www是world wide web的缩写,及万维网,也就是全球信息广播的意思;
  • 通常说的上网就是使用www来查询用户所需要的信息。
  • www可以结合文字、图形、影像以及声音等多媒体,超链接的方式将信息以Internet传递到世界各处去。
  • 当你连接www网站,该网站会提供一些数据,客户端要使用可以解析这些数据的软件来处理,那就是浏览器

1.2 网址

  • URI:Uniform Resource Identifier统一资源标识,分为URL和URN
  • URN:Uniform Resource Naming,统一资源命名,P2P下载使用的磁力链接是URN的一种实现
  • URL:Uniform Resorce Locator,统一资源定位符用于描述某服务器某特定资源位置
  • 两者区别:而URL提供查找该事物的方法。URN仅用于命名,而不指定地址

1.3 URL的组成

  • URL组成机构如下:

    <scheme>://<user>:<password>@<host>:<port>/<path>:<params>?<query>#<frag>
    
  • 每部分的定义为:

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

2. HTTP简介

2.1 什么是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

2.2 http的工作机制

  • 一次http事务包括:

    • http请求:http request

    • http响应: http response

  • Web资源: web resource

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

  • 资源类型:

    • 静态文件:无需服务端做出额外处理,服务器端和客户端的文件内容相同
    • 常见文件后缀:.html,.txt,.jpg,.js,.css,mp3,avi
  • 动态文件:服务端执行程序,返回执行的结果,服务器端和客户端的文件内容不相同

    • 常见文件后缀:.php,jsp,asp
  • web中常用的语言介绍

    • html语言 超文本标记语言

      <html>
      <head>
      <meta http-equiv=Content-Type content="text/html;charset=utf-8">
      <title>HTML语言</title>
      </head>
      <body>
      <img src="http://www.xianoupeng.com/uploadfile/2019/0424/20190424115929686.jpg">
      <h1 style="color:red">欢迎</h1>
      <p><a href=http://www.baidu.com>百度</a>欢迎你</p>
      </body>
      </html>
      
    • css 层叠样式表 表述网站的风格

      html网页主体
      ---
      <html>
      <head>
      <meta http-equiv=Content-Type content="text/htm1;charset=utf-8">
      <link rel="stylesheet" type="text/css" href="mystyle.css" />
      </head>
      <body>
      <h1>这是 heading 1</h1>
      <p>这是一段普通的段落。请注意,该段落的文本是红色的。在body选择器中定义了本页面中的默认文本颜
      色。</p>
      <p class="ex">该段落定义了class="ex"。该段落中的文本是蓝色的。</p>
      </body>
      </html>
      css文件
      --
      body {color:red }
      h1 {color:yellow }
      p.ex {color:blue }
      
    • js实现html和css实现不了的功能比如动画效果

      <!DOCTYPE html>
      <html>
      <head>
      <meta http-equiv=Content-Type content="text/html;charset=utf-8">
      </head>
      <body>
      <h2>我的第一个JavaScript</h2>
      <button type="button"
      onclick="document.getElementById('demo').innerHTML = Date()">
      点击这里来显示日期和时间
      </button>
      <p id="demo"></p>
      </body>
      </html>
      
  • mine(Multipurpose Internet Mail Extensions)多用途因特网邮件扩展

    • 它设计的最初目的是为了在发送电子邮件时附加多媒体数据,让邮件客户程序能根据其类型进行处理;
    • 为了支持多媒体数据类型,HTTP协议中就使用了附加在文档之前的MIME数据类型信息来标识数据类型。
    • 其主要功能是让服务器将它们发送的多媒体数据的类型告诉浏览器。
    • 服务器将MIME标志符放入传送的数据中来告诉浏览器使用哪种插件读取相关文件;
    • MIME类型存在于HTTP响应报文的响应头部信息里,它是一种文本标记;
    • MIME格式: type/subtype 文件类型后缀(html txt jpg png… …)
    MIME类型 文件类型
    text/html 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视频类

2.3 http访问请求的完整过程

  • 建立连接:

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

  • 接受请求

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

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

b.多进程I/O模型:并行启动多个进程,每个进程响应一个连接请求

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

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

  • 处理请求:

服务器对请求报文进行解析,并获取请求的资源及请求方法等相关信息,根据方法,资源,首部和可选

的主体部分对请求进行处理常用请求Method: GET、POST、HEAD、PUT、DELETE、TRACE、OPTIONS

  • 访问资源:

​ 服务器获取请求报文中请求的资源web服务器,即存放了web资源的服务器,负责向请求者提供对方请求

的静态资源,或动态运行后生成的资源

  • 5.构建响应报文:

​ 一旦Web服务器识别除了资源,就执行请求方法中描述的动作,并返回响应报文。响应报文中包含有响

应状态码、响应首部,如果生成了响应主体的话,还包括响应主体

​ 响应实体:如果事务处理产生了响应主体,就将内容放在响应报文中回送过去。响应报文中通常包括:描述了响应主体MIME类型的Content-Type首部;描述了响应主体长度的Content-Length

实际报文的主体内容:

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

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

2.4 http协议报文的头部结构

  • 请求报文

    • 请求情报文由三部分组成即:开始行、首部行、实体主体;

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

    • 首部行:通常用键值表示;

    • 空格;

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

    • 开始行中的请求方法:

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

    • 求情报文由三部分组成即:开始行、首部行、实体主体;
    • 开始行:http版本 状态码 短语 CRLF;
    • 首部行通常用键值表示;
    • 空格;
    • 实体主体数据,即获取内容。

2.5 状态代码

  • 状态码由三位数字组成,第一个数字定义了响应的类别,且有五种可能取值
状态码 含义 详解
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 服务器当前不能处理客户端的请求,一段时间后可能恢复正常

3. web服务器的配置详解

3.1 web服务的常用类型

  • Apache
  • Nginx
  • openresty
  • 大厂自研

3.2 Nginx的安装

  • 开源版本的Nginx官网:http://nginx.org
  • Nginx在安装的过程中可以选择源码安装也可以选择使用软件包安装
  • 源码安装下载相应的源码压缩包解压后编译完成安装
  • 软件安装包可以使用rpm或者apt命令进行安装,也可以使用dnf通过软件仓库安装

以软件仓库安装为例:

  • 配置软件仓库

    [root@localhost ~]# vim /etc/yum.repos.d/nginx.repo
    [nginx]
    name=nginx
    baseurl=http://nginx.org/packages/rhel/9/x86_64
    gpgcheck=0
    
  • 执行安装命令

    [root@localhost ~]# dnf install nginx –y
    
  • 关两个

  134  systemctl   stop  firewalld
  135  systemctl   status   firewalld
  136  getenforce

  • 启动服务并启用服务

    [root@localhost ~]# systemctl enable --now nginx.service   #启动并立即执行nginx服务
    [root@localhost ~]# netstat -antlupe | grep nginx		#查看nginx端口,默认为80
    [root@localhost ~]# firewall-cmd --permanent --add-service=http
    [root@localhost ~]# firewall-cmd –reload
    
  • 注意:在安装nginx之前还要配置好系统的软件仓库,nginx的安装需要通过系统软件仓库来解决依赖性

3.3 Nginx涉及到的文件

  • 相关配置文件的作用

    • 主配置文件:/etc/nginx/nginx.conf

    • 相关配置文件:/etc/nginx/conf.d

      相关配置文件的作用
      主配置目录:/etc/nginx
      相关配置文件:/etc/nginx
      
    • 日志文件:/var/log/nginx

    • 默认发布目录:/usr/share/niginx/html/

    • 默认发布文件内容:/usr/share/niginx/html/index.html

3.4 Nginx配置文件内容详解

  • 自己配置
# 编辑 Nginx 的主配置文件
[root@localhost ~]# vim /etc/nginx/nginx.conf
(改参数:
user nginx;
worker_processes 2;指定nginx开启的work进程个数,)
# 检查 Nginx 配置文件语法错误的命令
[root@localhost ~]# nginx -t	
# 在不停止 Nginx 服务的情况下,重新加载配置文件
[root@localhost ~]# nginx -s reload	
 ps   aux   |   grep   nginx
 #查看进程
  ps   aux   |   grep   nginx查看进程
改默认端口:
server {
        listen       8080;改成8080
刷新,查看
访问172.25.254.100:8080
修改默认发目录,默认发目录文件
	
  • nginx全局配置

    user nginx; 		#nginx程序运行用户
    worker_processes auto; 		#指定nginx开启的work进程个数
    error_log /var/log/nginx/error.log notice; 		#错误日志
    pid /var/run/nginx.pid; 		#pid文件
    events {
    worker_connections 1024; 		#指定每个 Nginx 工作进程可以同时处理的最大连接数
    }
    
  • http模块配置:用于配置与 HTTP 协议相关的全局设置以及服务器和位置相关的指令。

    http {
         # 定义了一个名为main的日志格式。这个格式指定了如何记录访问日志中的信息
        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()传输文件
        # 与sendfile配合使用,当sendfile开启且tcp_nopush设置为on时,Nginx 会尝试将多个小的数据包合并成一个大的数据包发送,减少网络传输中的小数据包数量,提高网络传输效率。
        tcp_nopush          on;		
        tcp_nodelay         on;		# 当包累计到一定大小后就发送,默认0.2s一次
        # 定义了一个 HTTP 连接在空闲状态下保持打开的时间,这里设置为 65 秒。在这个时间内,如果客户端再次发起请求,可以复用之前的连接,减少连接建立和关闭的开销,提高性能。
        keepalive_timeout   65;		# 长连接超时时间
        types_hash_max_size 4096;		#设置了 MIME 类型哈希表的最大大小
    
        include             /etc/nginx/mime.types;		#包含的配置文件
        default_type        application/octet-stream;		#设置了默认的 MIME 类型。如果 Nginx 无法根据文件扩展名确定 MIME 类型,就会使用这个默认值。
    
        #gzip on; 		#可以使网站的css、js 、xml、html 等静态资源在传输时进行压缩
        include /etc/nginx/conf.d/*.conf;		#指定子配置文件
        
         server {
            listen       80;		#指定了这个虚拟主机监听的端口为 80
            listen       [::]:80;		#用于监听 IPv6 地址的 80 端口
            server_name  _;
            root         /usr/share/nginx/html;		#默认发布目录,当客户端请求一个URL时,Nginx会在这个目录下查找相应的文件来响应请求。
            index		/usr/share/nginx/html/index.html		#默认发布文件,配置文件中没有,需要手动创建修改
            # Load configuration files for the default server block.
            include /etc/nginx/default.d/*.conf;
    
            error_page 404 /404.html;
            location = /404.html {
            }
    
            error_page 500 502 503 504 /50x.html;
            location = /50x.html {
            }
        }
    
    
    
  • 子配置文件

    /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;
        }
    }
    

3.5 Nginx配置

  • nginx虚拟主机

    • 默认情况下nginx只能发布一个站点;
    • 如果要发布多个站点需要搭建多台nginx来满足,如果这样会浪费太多资源;
    • 为解决上述问题,启用nginx的虚拟主机即可;
    • 虚拟主机有两种模式,基于IP或者基于域名
  • 基于IP的虚拟主机

    
    [root@localhost ~]# ip addr add 172.25.254.111/24 dev ens160
    [root@localhost ~]# ip addr add 172.25.254.222/24 dev ens160
    [root@localhost ~]# mkdir -p /usr/share/nginx/vhostroot/{111,222}/html
    [root@localhost ~]# echo 172.25.254.111 > /usr/share/nginx/vhostroot/111/html/index.html
    [root@localhost ~]# echo 172.25.254.222 > /usr/share/nginx/vhostroot/222/html/index.html
    [root@localhost ~]# vim /etc/nginx/conf.d/vhost_ip.conf
    server{
    listen 172.25.254.111:80;
    location / {
    root /usr/share/nginx/vhostroot/111/html;
    index index.html
    		}
    	}
    server{
    listen 172.25.254.222:80;
    location / {
    root /usr/share/nginx/vhostroot/222/html;
    index index.html 
    		}
    	}
    [root@localhost ~]# curl 172.25.254.222:8080
    172.25.254.222
    [root@localhost ~]# curl 172.25.254.111
    172.25.254.111
    
    • 自己练习
修改参数
root         /nginx/html;
        index        timinglee.html;改默认发目录
/nginx/virtual/timinglee.org/{news,bbs}/html   建立两个站点
基于ip的:ip a a 172.25.254.101/24 dev ens160
                  ip a a 172.25.254.102/24 dev ens160添加两个ip
               配置ip:主配置文件里include /etc/nginx/conf.d/*.conf;放server后面
写入/etc/nginx/conf.d , vim   vhosts.conf写入两个ip的内容
刷新
  • 基于域名的虚拟主机

    [root@localhost ~]# mkdir -p /usr/share/nginx/vhostroot/{bbs,news}/html
    [root@localhost ~]# echo news.easylee.org > /usr/share/nginx/vhostroot/news/html/index.html
    [root@localhost ~]# echo bbs.easylee.org > /usr/share/nginx/vhostroot/bbs/html/index.html
    [root@localhost ~]# vim /etc/nginx/conf.d/vhost_name.conf
    server {
    listen 80;
    server_name bbs.easylee.org;
    location / {
    root /usr/share/nginx/vhostroot/bbs/html;
    index index.html;
    		}
    	}
    server {
    listen 80;
    server_name news.easylee.org;
    location / {
    root /usr/share/nginx/vhostroot/news/html;
    index index.html;
    		}
        }
    
    • 测试
    [root@localhost conf.d]# curl news.easylee.org
    news.easylee.org
    [root@localhost conf.d]# curl bbs.easylee.org
    news.easylee.org
    
    • 注意:在测试时因为虚拟主机是基于域名的,执行测试命令的主机需要做本地解析
    # 在linux中
    [root@localhost ~]# vim /etc/hosts
    172.25.254.100 bbs.easylee.org news.easylee.org
    # 在windows中,编辑文件 C:\Windows\System32\drivers\etc\hosts
    172.25.254.100  bbs.easylee.org news.easylee.org
    
  • web服务器的访问控制

    • 基于IP的访问控制

      • 设置访问控制

        [root@localhost ~]# mkdir -p /usr/share/nginx/vhostroot/bbs/html/admin
        [root@localhost ~]# echo admin page > /usr/share/nginx/vhostroot/bbs/html/admin/index.html
        [root@localhost ~]# 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中访问
        [root@localhost ~]# curl bbs.easylee.org/admin/
        admin page
        在其他主机中访问
        ] ➤ curl bbs.easylee.org/admin/
        <html>
        <head><title>403 Forbidden</title></head>
        <body>
        <center><h1>403 Forbidden</h1></center>
        <hr><center>nginx/1.24.0</center>
        </body>
        </html>
        
    • 基于认证的访问控制

      • 建立认证文件按

        [root@localhost ~]# dnf install httpd-tools -y
        [root@localhost ~]# htpasswd -cm /etc/nginx/.htpasswd admin
        New password:
        Re-type new password:
        Adding password for user admin
        
        注意:htpasswd -c 表示新建认证文件,无论认证文件存不存在
        
        当认证文件存在时加-c参数会把认证文件之前的内容全部清空
        
      • 设置认证访问控制

        [root@localhost ~]# 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;
            }
        }
        
      • 测试

        未输入用户密码
        [root@localhost ~]# curl bbs.easylee.org/admin/
        <html>
        <head><title>401 Authorization Required</title></head>
        <body>
        <center><h1>401 Authorization Required</h1></center>
        <hr><center>nginx/1.24.0</center>
        </body>
        </html>
        输入用户没密码
        [root@localhost ~]# curl bbs.easylee.org/admin/ -uadmin:lee
        admin page
        
        • 自己练习
(1)访问
root@localhost nginx]# cd     /nginx/html/
[root@localhost html]# ls
index.html  timinglee.html
[root@localhost html]# mkdir    admin
[root@localhost html]# echo   admin  >    admin/index.html
[root@localhost html]# curl    172.25.254.100/admin/
(2)基于ip访问控制
cd  /etc/nginx/
  vim   nginx.conf     编写信息,刷新,allow和deny小的放上面,大的放下面,写在上面的优先级最高
(3)基于用户的访问控制
dnf   install   httpd-tools  -y先安装
htpasswd   -cm   /etc/nginx/.htpasswd   admin用户生成(当文件不存在时建立,文件存在时覆盖,如果文件存在,新用户就把c去掉)
vim   nginx.conf(进入里面修改基于域名),刷新
curl    172.25.254.100/admin/  -uadmin:lee(访问)

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

  • 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握手流程

  • 部署https

    • 生成密钥

      [root@localhost ~]# mkdir -p /etc/nginx/certs
      [root@localhost ~]# 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
      
      # 查看证书内容
      [root@localhost ~]# openssl x509 -in easylee.org.crt -text -noout
      
      我们生成的证书需要通过CA机构认证才能投入生产环境中
      CA就是一个公认的公证单位,你可以自行产生一把密钥且制作出必要的证书数据并向CA单位注册,那么当客户端的浏览器在浏览时,该浏览器会主动向CA单位确认该证书是否为合法注册过,如果是,那么该次连接才会建立,如果不是,浏览器会发出警告信息,告知用户应避免建立连接
      
    • 配置nginx开启https功能

      [root@localhost ~]# mkdir /usr/share/nginx/vhostroot/login/html -p
      [root@localhost ~]# echo login.easylee.org > /usr/share/nginx/vhostroot/login/html/index.html
      [root@localhost ~]# vim /etc/nginx/conf.d/https.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;
          }
      }
      访问前要做解析,在windows里的那个hosts里加入login.timinglee.org
      # 检查 Nginx 配置文件语法错误的命令
      [root@localhost ~]# nginx -t	
      # 在不停止 Nginx 服务的情况下,重新加载配置文件
      [root@localhost ~]# nginx -s reload	
      dnf  install  mod_ssl.x86_64    -y
      systemctl   start   nginx
      访问https://login.timinglee.org
      
      
      当开启https后客户一般情况下不会在浏览器中特别添加https去访问,我们需要强制客户在访问某些站点时使用加密
      
    • 强制访问加密

      [root@localhost ~]# /etc/nginx/conf.d/https.conf
      server {
          listen 80;
          server_name login.easylee.org;
          rewrite ^/(.*)$ https://login.easylee.org/$1 permanent;
      }
      
      
      ^/(.*)$ 这时正则表达式语法表示匹配浏览器地址栏中的所有内容
      $1 login.easylee.org/xxx 这个地址转换时保留xxx
      permanent 表示永久转换301
      

3.7 搭建动态网站

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

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

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

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

    • 下载php并启动服务

      [root@localhost ~]# dnf install php -y
      [root@localhost ~]# systemctl enable --now php-fpm.service
      
    • 生成php测试页

      [root@localhost ~]# mkdir -p /usr/share/nginx/html/php
      [root@localhost ~]# vim /usr/share/nginx/html/php/index.php
      <?php
      phpinfo();
      ?>
      [root@localhost ~]# nginx -s reload
      
    • 直接访问172.25.254.100/index.php

地址栏中的所有内容
$1 login.easylee.org/xxx 这个地址转换时保留xxx
permanent 表示永久转换301
```

3.7 搭建动态网站

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

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

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

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

    • 下载php并启动服务

      [root@localhost ~]# dnf install php -y
      [root@localhost ~]# systemctl enable --now php-fpm.service
      
    • 生成php测试页

      [root@localhost ~]# mkdir -p /usr/share/nginx/html/php
      [root@localhost ~]# vim /usr/share/nginx/html/php/index.php
      <?php
      phpinfo();
      ?>
      [root@localhost ~]# nginx -s reload
      
    • 直接访问172.25.254.100/index.php