当前位置: 首页 > news >正文

Linux - web服务器

四、web服务器

1、基础知识

URL:Uniform Resource Locator,统一资源定位符,对可以从互联网上得到的资源的位置和访问方法的一种简洁的表示,是互联网上标准资源的地址。

网址格式:<协议>://<主机或主机名>[:port]/<目录资源,路径>

  • 浏览器常支持的协议有:http、https、ftp等。

  • 主机地址或者主机名:主机地址就是服务器在因特网所在的IP地址。如果是主机名的话,那么 就需要域名解析了。

  • 端口号(port):http为80,https为443 (IANA:互联网数字分配机构)

    • 其中,0-1023属于特权端口(只有管理员有权限 启用并让进程监听),永久地分配给固定的应用程序使用。
    • 1024-41951为注册端口,但要求不是特别严格,分配给程序注册为某应用使用: 3306/TCP。
    • 41952-60000为客户端程序随机使用的端口,动态端口,或私有端口 。
  • http请求方法:在http通信中,每个http请求报文都包含一个方法,用以告诉web服务器端需要执 行哪些具体的动作,这些动作包括:获取指定web页面、提交内容到服务器、删除服务器上资源文 件等。

    序号方法描述
    1GET请求指定的页面信息,并返回实体主体
    2HEAD与GET相似,但返回的响应内容中没有具体的内容(获取报头)
    3POST向指定资源提交数据进行处理的请求(表单或者文件),数据被包含在请求体中,该请求可能会导致新的资源的建立或已有资源的修改
    4PUT客户端向服务端传送的数据取代指定的文档的内容
    5DELETE请求删除指定页面
    6CONNECTHTTP1.1协议中预留给能够将连接改为管道方式的代理服务器
    7OPTIONS允许客户端查看服务器的性能
    8TRACE回显服务器收到的请求,主要用于测试或诊断
  • 状态代码:由三位数字组成,第一个数字定义了响应的类别。

    • 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:服务器当前不能处理客户端的请求,一段时间后可能恢复正常 。
  • HTTP报文:http报文中有很多行内容,这些行的字段内容都是由一些ASCII码串组成,但各个字段 的长度是不同的。http报文可分为两种,一种是从web客户端发往web服务器的http报文,称为请 求报文。另外一种是从web服务器发往web客户端的报文,称为响应报文 。

  • http协议请求的工作流程:

    1、终端客户在web浏览器地址栏输入访问地址(一般是域名,也可以直接使用IP)。

    2、web浏览器请求DNS服务器把域名解析成web服务器的IP地址(域名访问)。

    3、web浏览器将端口号(http协议默认是80)从访问地址(URL)中解析出来。

    4、web浏览器通过解析后的ip地址及端口号与web服务器之间建立一条TCP连接。

    5、建立TCP连接后,web浏览器向web服务器发送一条HTTP请求报文。

    6、web服务器响应并读取浏览器的请求信息,然后返回一条HTTP响应报文。

    7、web服务器关闭HTTP连接,关闭TCP连接,web浏览器显示访问的网站内容到屏幕上。

  • web服务器类型

    • 静态网页 — 单纯是由服务器单向提供数据给客户端,Server不需要与client端有互动,所以你可以到该网站上去浏 览,但是无法进行数据的上传。
    • 动态网站 — 这种类型的网站可以让服务器与用户互动。

2、Nginx基础

web服务器提供的这些数据大部分都是文件,那么我们需要在服务器端先将数据文件写好,并且放置在 某个特殊的目录下面,这个目录就是我们整个网站的首页,在nginx中,这个目录默认 在/usr/share/nginx/html/。浏览器是通过你在地址栏中输入你所需要的网址来取得这个目录的数据的。

安装

yum install nginx -y

配置文件结构

#以树状结构查看文件
[root@server ~]# tree /etc/nginx
/etc/nginx
├── conf.d	#子配置文件目录
├── default.d
├── fastcgi.conf
├── fastcgi.conf.default
├── fastcgi_params	#用以翻译nginx的变量供php识别
├── fastcgi_params.default
├── koi-utf
├── koi-win
├── mime.types	#用以配置支持的媒体文件类型
├── mime.types.default
├── nginx.conf	#主配置文件
├── nginx.conf.default
├── scgi_params
├── scgi_params.default
├── uwsgi_params	#用以配置nginx的变量供python识别
├── uwsgi_params.default
└── win-utf2 directories, 15 files

配置文件默认内容

[root@server ~]# grep   ^[^#] /etc/nginx/nginx.conf
#全局配置开始
user nginx;	#进程所属用户
worker_processes auto;	#worker数量
error_log /var/log/nginx/error.log;	#错误日志存放路径
pid /run/nginx.pid;	#pid文件路径
include /usr/share/nginx/modules/*.conf;	#include导入的功能模块配置文件
#全局配置结束
#性能配置开始
events {worker_connections 1024;	#TCP连接数
}
#性能配置结束
#http模块配置开始
http {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;	#性能优化参数tcp_nodelay         on;	#性能优化参数keepalive_timeout   65;	#持久连接时间或超时时间types_hash_max_size 4096;	#性能优化参数include             /etc/nginx/mime.types;	 #可解析的静态资源类型default_type        application/octet-stream;# Load modular configuration files from the /etc/nginx/conf.d directory.# See http://nginx.org/en/docs/ngx_core_module.html#include# for more information.include /etc/nginx/conf.d/*.conf;	 #子配置文件存放路径#server区块开始server {listen       80;	#监听端口listen       [::]:80;server_name  _;	#服务器的名字root         /usr/share/nginx/html;	 #主页存放路径# Load configuration files for the default server block.include /etc/nginx/default.d/*.conf;	 #子配置文件存放路径error_page 404 /404.html;	 #404错误返回的页面location = /404.html {}	#使用location定义用户请求的urierror_page 500 502 503 504 /50x.html;	#500、502、503、504返回的页面location = /50x.html {}}#server区块结束
}
#http区块结束

3、web静态页面配置流程

配置前准备工作

#关闭防火墙
[root@server ~]# systemctl stop firewalld
#关闭selinux
[root@server ~]# setenforce 0
[root@server ~]# getenforce
Permissive

1、简单静态页面

创建自己的Nginx配置文件并编写

[root@server ~]# vim /etc/nginx/conf.d/self.conf
#self.conf就是我们新创建的配置文件
内容:
server {listen 192.168.5.100:80;	#网页IP以及监听的端口号root /self/hello;	#提供网页的文件location / {}
}

编写网页页面文件

[root@server ~]# mkdir -pv /self/hello
mkdir: 已创建目录 '/self'
mkdir: 已创建目录 '/self/hello'
[root@server ~]# echo hello > /self/hello/index.html

测试

#重启Nginx服务并获取网页内容
[root@server ~]# systemctl restart nginx
[root@server ~]# curl 192.168.5.100
hello

2、添加域名

编辑配置文件

server {listen 192.168.5.100:80;server_name www.hello.com;root /self/hello;location / {}
}

测试

#因为我们的域名不存在于DNS服务器中,所以不能作DNS解析。这里手动添加在解析文件中
[root@server ~]# vim /etc/hosts
添加:
192.168.5.100   www.hello.com
#测试
[root@server ~]# curl www.hello.com
hello

3、修改监听端口号

编辑配置文件

server {listen 192.168.5.100:10000;server_name www.hello.com;root /self/hello;location / {}
}

测试

#现在我们直接访问
[root@server ~]# curl www.hello.com
#将会默认使用80端口来访问,因为我们改了端口号,所以访问不到我们的页面。这里将会访问到Nginx默认的页面/usr/share/nginx/html/index.html中的内容
#需要加上端口号访问
[root@server ~]# curl www.hello.com:10000
hello

4、单服务器多网页

添加IP地址

#使用图形化界面:nmtui
#编辑网卡并添加新的IP地址:192.168.5.110
#激活网卡
[root@server ~]# nmcli con up ens160
#添加域名解析信息
192.168.5.110   www.haha.com

编辑配置文件

server {listen 192.168.5.100:80;server_name www.hello.com;root /self/hello;location / {}
}server {listen 192.168.5.110:80;server_name www.haha.com;root /self/haha;location / {}
}

添加页面文件

[root@server ~]# mkdir /self/haha -v
mkdir: 已创建目录 '/self/haha'
[root@server ~]# [root@server ~]# vim /self/haha/index.html 
#文件内容:hahahahaha

测试

#重启服务
[root@server ~]# systemctl restart nginx
#获取网页内容
[root@server ~]# curl www.haha.com
hahahahaha
[root@server ~]# curl www.hello.com
hello

5、基于虚拟目录和用户控制的web网站

  • 虚拟目录

    • 编辑配置文件

      server {listen 192.168.5.100:80;server_name www.hello.com;root /self/hello;location / {}location /test1 {alias /test1;}
      }server {listen 192.168.5.110:80;server_name www.haha.com;root /self/haha;location / {}location /test2 {alias /test2;}
      }
      
    • 创建页面文件

      [root@server ~]# mkdir /test{1,2}
      [root@server ~]# echo this is a test1 > /test1/index.html
      [root@server ~]# echo this is a test2 > /test2/index.html
      
    • 测试

      [root@server ~]# curl www.hello.com/test1/
      this is a test1
      [root@server ~]# curl www.haha.com/test2/
      this is a test2
      
  • 用户控制

    • 安装用户管理工具

      yum install httpd-tools -y
      
    • 编辑配置文件

      server {listen 192.168.5.100:80;server_name www.hello.com;root /self/hello;location / {}location /test1 {alias /test1;auth_basic on;  #开启限制用户访问auth_basic_user_file /etc/nginx/users;	#允许访问用户目录}
      }
      
    • 添加可访问用户

      [root@server ~]# htpasswd -c /etc/nginx/users zhangsan
      New password: 
      Re-type new password: 
      Adding password for user zhangsan
      
    • 测试

      外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

6、基于https的静态页面

生成私钥密钥

[root@server ~]# openssl genrsa -out /etc/pki/tls/private/openlab.key
#储存私钥文件地址:/etc/pki/tls/private/openlab.key

基于私钥生成公钥密钥

[root@server ~]# openssl req -utf8 -new -key /etc/pki/tls/private/openlab.key  -x509 -days 365 -out /etc/pki/tls/certs/openlab.crt
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:CH
State or Province Name (full name) []:SC
Locality Name (eg, city) [Default City]:CD
Organization Name (eg, company) [Default Company Ltd]:WL
Organizational Unit Name (eg, section) []:TEST
Common Name (eg, your name or your server's hostname) []:LW
Email Address []:ADMIN@outlook.com
#储存公钥的文件地址:/etc/pki/tls/certs/openlab.crt

将文件写入配置文件

server {listen 192.168.5.100:443 ssl;	#https协议使用443端口server_name www.hello.com;root /self/hello;ssl_certificate /etc/pki/tls/certs/openlab.crt;ssl_certificate_key /etc/pki/tls/private/openlab.key;location / {}location /test1 {alias /test1;}
}

重启服务测试

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

ab.crt


将文件写入配置文件~~~bash
server {listen 192.168.5.100:443 ssl;	#https协议使用443端口server_name www.hello.com;root /self/hello;ssl_certificate /etc/pki/tls/certs/openlab.crt;ssl_certificate_key /etc/pki/tls/private/openlab.key;location / {}location /test1 {alias /test1;}
}

重启服务测试

[外链图片转存中…(img-ZQp0IBLl-1732951972551)]

这里是因为我们在CA机构认证CA证书,所以存在风险。

http://www.lryc.cn/news/494538.html

相关文章:

  • 设计模式-适配器模式-注册器模式
  • 减速机润滑油更换的最佳周期是多久?
  • 程序执行堆栈执行模拟
  • 《Python基础》之数据加密模块hashlib的用法
  • 安装Fcitx5输入框架和输入法自动部署脚本(来自Mark24)-Ubuntu通用
  • 【IMF靶场渗透】
  • Zookeeper选举算法与提案处理概览
  • 深入了解 Adam 优化器对显存的需求:以 LLaMA-2 7B 模型为例 (中英双语)
  • 数据分析学习
  • PaddleOCR:一款高性能的OCR工具介绍
  • Transformers快速入门代码解析(一):注意力机制——Attention:Scaled Dot-product Attention
  • Git中HEAD、工作树和索引的区别
  • 【python量化教程】如何使用必盈API的股票接口,获取最新实时交易数据
  • 【C++】动态内存与智能指针——shared_ptr 和 new 结合使用
  • 遥感数据集:FTW全球农田边界和对应影像数据,约160万田块边界及7万多个样本
  • 马斯克的 AI 游戏工作室:人工智能与游戏产业的融合新纪元
  • URDF(描述机器人模型)和SDF(Gazebo中用于描述仿真环境)
  • 力扣380:O(1)时间插入、删除和获取随机数
  • 【C++boost::asio网络编程】有关socket的创建和连接的笔记
  • 超级灵感:前端页面功能统一管理方案
  • 力扣第 77 题 组合
  • (超详细图文)PLSQL Developer 配置连接远程 Oracle 服务
  • 元器件选型与参数13 电源的分类-线性电源参数 RT9013 AMS1117 PCB布局布线
  • RHEL7+Oracle11.2 RAC集群-多路径(multipath+udev)安装步骤
  • 每日速记10道java面试题03
  • Vue 3 的双向绑定原理
  • 如何使用 Chrome 无痕浏览模式访问网站?
  • Idea 2024.3 突然出现点击run 运行没有反应,且没有任何提示。
  • 【小白学机器学习36】关于独立概率,联合概率,交叉概率,交叉概率和,总概率等 概念辨析的例子
  • Spring Boot 项目——分层架构