www简介
Web网络服务也叫WWW(World Wide Web 全球信息广播)万维网服务,一般是指能够让用户通过浏览器访问到互联网中文档等资源的服务
Web 网络服务是一种被动访问的服务程序,即只有接收到互联网中其他主机发出的请求后才会响应,最终用于提供服务程序的 Web 服务器会通过 HTTP(超文本传输协议)或HTTPS(安全超文本传输协议)把请求的内容传送给用户,如图:
常见Web服务程序介绍:
Windows系统中默认Web服务程序是I I S(Internet Information Services),这是一款图形化的网站管理工具,IIS程序不光能提供Web网站服务,还能够提供FTP、NMTP、SMTP等服务功能,但只能在Windows系统中使用
2004 年 10 月 4 日,为俄罗斯知名门户站点而开发的 Web 服务程序 Nginx 横空出世。Nginx程序作为一款轻量级的网站服务软件,因其稳定性和丰富的功能而快速占领服务器市场,但Nginx 最被认可的还当是低系统资源占用、内存少且并发能力强,因此得到了国内诸如新浪、网易、腾讯等门户站的青睐
Apache——取自美国印第安人土著语Apache,寓意着拥有高超的作战策略和无穷的耐性,由于其跨平台和安全性广泛被认可且拥有快速、可靠、简单的API扩展。目前拥有很高的Web服务软件市场占用率,全球使用最多的Web服务软件,开源、跨平台(可运行于Unix,linux,windows中)
Tomcat——属于轻量级的Web服务软件,一般用于开发和调试JSP代码,通常认为Tomcat是Apache的扩展程序
服务器主机
网站是由域名、网页源程序和主机空间组成的,其中主机空间则是用于存放网页源代码并能够将网页内容展示给用户,虽然本小节与Apache服务没有直接关系,但如果您想要在互联网中搭建网站并被顺利访问,主机空间一定不能选错
虚拟主机:在一台服务器中分出一定的磁盘空间供用户放置网站、存放数据等,仅提供基础的网站访问、数据存放与传输流量功能,能够极大的降低用户费用,也几乎不需要管理员维护除网站数据以外的服务,适合小型网站
VPS(Virtual Private Server):在一台服务器中利用OpenVZ、Xen或KVM等虚拟化技术模拟出多个“主机”,每个主机都有独立的IP地址、操作系统,实现不同VPS之间磁盘空间、内存、CPU资源、进程与系统配置间的完全隔离,管理员可自由使用分配到的主机中的所有资源,所以需要有一定的维护系统的能力,适合小型网站
云服务器(ECS):是一种整合了计算、存储、网络,能够做到弹性伸缩的计算服务,其使用起来与VPS几乎一样,但差别是云服务器建立在一组集群服务器中,每个服务器都会保存一个主机的镜像(备份),大大的提升了安全稳定性,另外还具备了灵活性与扩展性,用户只需按使用量付费的即可,适合大中小型网站。
独立服务器:这台服务器仅提供给您使用,详细来讲又可以区分为租用方式与托管方式
租用方式:用户只需将硬件配置要求告知IDC服务商,服务器硬件设备由机房负责维护,运维管理员一般需要自行安装相应的软件并部署网站服务,租期可以为月、季、年,减轻了用户初期对硬件设备的投入,适合大中型网站。
托管方式:用户需要自行购置服务器后交给IDC服务供应商的机房进行管理(缴纳管理服务费用),用户对服务器硬件配置有完全的控制权,自主性强,但需要自行维护、修理服务器硬件设备,适合大中型网站。
另外有必要提醒,选择主机空间供应商时请一定要注意看口碑,综合分析再决定购买,某些供应商会有限制功能、强制添加广告、隐藏扣费或强制扣费等恶劣行为,一定一定不要上当!
主要数据
服务器所提供的最主要数据是超文本标记语言(Hyper Text Markup Language,HTML)、多媒体文件(图片、影像、声音、文字等,都属于多媒体或称为超媒体),HTML只是一些纯文本数据,通过所谓的标记来规范所要显示的数据格式
浏览器
客户端收到服务器的数据之后需要软件解析服务器所提供的数据,最后将效果呈现在用户的屏幕上。
那么著名的浏览器就有内建在Windows操作系统内的IE浏览器(淘汰)和Microsoft Edge,还有Firefox浏览器和Google的chrome浏览器
网址及HTTP简介
web服务器提供的这些数据大部分都是文件,那么我们需要在服务器端先将数据文件写好,并且放置在某个特殊的目录下面,这个目录就是我们整个网站的首页,在redhat中,这个目录默认在 /var/www/html 。
浏览器是通过你在地址栏中输入你所需要的网址来取得这个目录的数据的
URL
Uniform Resource Locator,统一资源定位符,对可以从互联网上得到的资源的位置和访问方法的一种简洁的表示,是互联网上标准资源的地址
网址格式:
<协议>://<主机或主机名>[:port]/<目录资源,路径>
**协议::http、https、ftp等
主机地址或者主机名:主机地址就是服务器在因特网所在的IP地址。如果是主机名的话,那么就需要域名解析了
端口号(port):http为80,https为443 (IANA:互联网数字分配机构)
0-1023:永久地分配给固定的应用程序使用
1024-41951:注册端口,但要求不是特别严格,分配给程序注册为某应用使用
41952-60000:客户端程序随机使用的端口,动态端口,或私有端口
http请求方法:
工作机制:
在http通信中,每个http请求报文都包含一个方法,用以告诉web服务器端需要执行哪些具体的动作,这些动作包括:获取指定web页面、提交内容到服务器、删除服务器上资源文件等。
状态代码:由三位数字组成,第一个数字定义了响应的类别,且有五种可能取值
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协议请求的工作流程:
特点
www服务器的类型
静态网站
仅提供用户浏览的单向静态网页,单纯是由服务器单向提供数据给客户端,Server不需要与client端有互动,可以浏览网站,但是无法数据上传。
动态网站
该站可以让服务器与用户互动,常见的例如留言板,博客。这种类型的网站需要通过“网页程序语言”来实现与用户互动的行为。常见的例如:PHP网页程序语言,配合数据库系统来进行数据的读、写。当你在向服务器请求数据时,其实是通过服务器端同一个网页程序在负责将数据读出或写入数据库,变动的是数据库的内容,网页程序并没有任何改变。
另外一种交互式的动态网页主要是在客户端实现。服务端将可执行的程序代码(JavaScript)传送给客户端,客户端的浏览器如果提供JavaScript的功能,那么该程序就可以在客户端的计算机上面工作了;另外一种可在客户端执行的就是flash动画格式,在这种动画格式内还可以进行程序设计
-
使用nginx搭建web网站
nginx简介
概念
特点
nginx架构
注意:默认情况下,nginx会建立和服务器CPU核心数相等的worker进程,woker进程之间相互独立,若一个进程故障不会影响其它进程
nginx关键工作机制
抢占机制:当客户端发起请求时,会激活accept_mutex互斥锁,那个worker抢占了该互斥锁,该客户端的请求就由那个worker响应和处理
异步非阻塞模式:在传统事件处理模式下,如果所有的worker被客户端阻塞后,新来的客户就需要等待,直到原来的客户端释放worker后才能被处理请求,在异步非阻塞模式下,底层使用了linux的epoll模型,就算worker被阻塞,新的客户端请求也会被正常处理
nginx正向代理功能
图:
分析:它的工作原理就像一个跳板,简单的说,我是一个用户,我访问不了某网站,但是我能访问一个代理服务器,这个代理服务器呢,他能访问那个我不能访问的网站,于是我先连上代理服务器,告诉他我需要那个无法访问网站的内容,代理服务器去取回来,然后返回给我,从网站的角度,只在代理服务器来取内容的时候有一次记录,有时候并不知道是用户的请求,也隐藏了用户的资料,这取决于代理告不告诉网站。
理解:
客户端 <一> 代理 <一> 服务端 A租房人(客户端) B房产中介(代理) C真实房东(服务端)
A租房人(客户端)想租C真实房东的房子,但不认识C真实房东(服务端)
B房产中介(代理)认识C真实房东(服务端),并且从C真实房东(服务端)租到了房
A租房人(客户端)通过B房产中介(代理)租到了C真实房东(服务端)的房
C真实房东(服务端)只知道房子租给了B房产中介(代理),并不知道A租房人(客户端)租了自己的房子
结论:正向代理 是一个位于客户端和原始服务器(origin server)之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端。客户端必须要进行一些特别的设置才能使用正向代理。就像要访问google用vpn代理翻墙去访问(用户知道要访问真正的服务器)
nginx反向代理功能
图:
-
分析:反向代理正好相反,它也是在客户端和服务器端的一个代理服务器,但是这个代理服务器的目的是用来保护服务器端的,当外网客户端来访问我们的服务器时为了避免暴露应用服务器的实际ip地址,我们会让客端访问代理服务器,然后代理服务器再根据客户端的请求去实际的应用服务器获取响应内容并返回客户端
nginx负载均衡功能
部署Nginx
[root@server ~]# setenforce 0
[root@server ~]# systemctl stop firewalld
[root@server ~]# systemctl disable firewalld
[root@server ~]# yum install nginx -y
[root@server ~]# nginx -V # 查看版本,编译器、配置参数等信息
[root@server ~]# systemctl start nginx # 启动httpd
[root@server ~]# systemctl enable nginx # 设置开机启动
Created symlink /etc/systemd/system/multi-user.target.wants/nginx.service → /usr/lib/systemd/system/nginx.service.
[root@server ~]# systemctl status nginx # 查看状态,q键退出查看
[root@server ~]# ps -ef | grep nginx # 查看进程
root 1690 1 0 13:57 ? 00:00:00 nginx: master process /usr/sbin/nginx
nginx 1691 1690 0 13:57 ? 00:00:00 nginx: worker process
nginx 1692 1690 0 13:57 ? 00:00:00 nginx: worker process
root 1726 1510 0 14:00 pts/0 00:00:00 grep --color=auto nginx
# 测试,Windows中打开浏览器输入服务器IP地址
常用命令
systemctl系列
systemctl start nginx # 启动服务 systemcctl restart nginx # 重启服务 systemctl enable nginx # 开机启动 systemctl stop nginx # 停止服务 systemctl disable nginx # 取消开机启动 systemctl status nginx # 查看状态
nginx自带命令
nginx # 启动nginx nginx restart # 重启服务 nginx -s reload # 重新加载配置文件 nginx -s stop # 强行停止服务 nginx -s quit # 优雅停止服务,即所有请求处理完后退出服务 nginx -v # 查看版本号 nginx -t # 检查配置文件的语法错误,无错返回ok
nginx配置文件
[root@server ~]# cd /etc/nginx # 服务目录
[root@server nginx]# yum install tree -y
[root@server nginx]# tree
.
├── conf.d # 子配置文件目录
├── default.d
├── fastcgi.conf
├── fastcgi.conf.default
├── fastcgi_params
├── fastcgi_params.default
├── koi-utf # KOI8-R 编码(俄语)转换的映射文件
├── koi-win # # KOI8-R 编码(俄语)转换的映射文件
├── mime.types # 配置支持的媒体类型
├── mime.types.default # 样例文件
├── nginx.conf # 主配置文件
├── nginx.conf.default # 样例文件
├── scgi_params
├── scgi_params.default
├── uwsgi_params
├── uwsgi_params.default
└── win-utf # KOI8-R 编码(俄语)转换的映射文件
2 directories, 15 files
网页默认目录:/usr/share/nginx/html
访问日志:/var/log/nginx/access.log
错误日志:/var/log/nginx/error.log
主配置文件
[root@server ~]# vim /etc/nginx/nginx.conf
结构
分析
层级结构图
配置分析
# main配置段(全局配置)
user nginx; # 运行的账户,默认即是nginx,可以不进行设置
worker_processes auto; # worker进程数,根据硬件调整,通常等于CPU数量或者2倍于CPU
error_log /var/log/nginx/error.log; # 错误日志存放目录
pid /run/nginx.pid; # 指定运行Nginx master主进程的pid文件存放路径
# Load dynamic modules. See /usr/share/doc/nginx/README.dynamic.
include /usr/share/nginx/modules/*.conf; # 导入的外部文件位置
# events配置段,性能模块设置,其中可以设置时间处理模式等
events {
use epoll; # 使用epoll事件驱动模型,但不推荐配置它,让nginx自己选择
worker_connections 1024; # 每个进程的最大连接数量(并发数)
accept_mutex on # 默认是off关闭的,这里推荐打开
}
# http配置段,包含全局块和server块,使用最频繁的部分,代理、缓存、日志定义等绝大多数功能和第三方模块的配置都在这里设置
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; # 监听IPV4端口
listen [::]:80; # 监听IPV6端口
server_name _; # 访问的域名
root /usr/share/nginx/html; # 网页默认目录
# Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf; # 子配置文件存储路径
# location配置段,一般用来匹配不同的URI请求
location / {
root /usr/share/nginx/html; # 相对路径网站根目录
alias /usr/share/nginx/html/; # 绝对路径网站根目录
index index.html index.htm; # 默认首页文件
deny 172.168.22.11; # 禁止访问的ip地址,可以为all
allow 172.168.33.44; # 允许访问的ip地址,可以为all
autoindex on; # 开启目录文件列表
autoindex_exact_size on; # 显示出文件的确切大小,单位是bytes
autoindex_localtime on; # 显示的文件时间为文件的服务器时间
charset utf-8,gbk; # 避免中文乱码
auth_basic "xxxx"; # 加密网页验证时的提示信息
auth_basic_user_file /路径/文件名; # 加密网页使用的密码验证文件
}
error_page 404 /404.html; # 404时返回给客户端的页面
location = /40x.html {
}
error_page 500 502 503 504 /50x.html; # 50x错误返回给客户端的页面
location = /50x.html {
}
}
# Settings for a TLS enabled server. # https虚拟主机定义
#
# server {
# listen 443 ssl http2; # 监听的IPV4端口
# listen [::]:443 ssl http2;
# server_name _;
# root /usr/share/nginx/html; # 网页默认目录
#
# ssl_certificate "/etc/pki/nginx/server.crt"; # 证书存储路径
# ssl_certificate_key "/etc/pki/nginx/private/server.key"; # 密钥存储
# ssl_session_cache shared:SSL:1m;
# ssl_session_timeout 10m;
# ssl_ciphers PROFILE=SYSTEM;
# ssl_prefer_server_ciphers on;
#
# # Load configuration files for the default server block.
# include /etc/nginx/default.d/*.conf;
#
# error_page 404 /404.html;
# location = /40x.html {
# }
#
# error_page 500 502 503 504 /50x.html;
# location = /50x.html {
# }
# }
}
注意
server_name指令一般用于指定虚拟主机的域名,在匹配时有以下四中写法
精确匹配:server_name Advanced Load Balancer, Web Server, & Reverse Proxy - NGINX ;
左侧匹配:server_name *.Advanced Load Balancer, Web Server, & Reverse Proxy - NGINX ;
右侧匹配:server_name www.nginx.* ;
正则匹配:server_name ~^www.nginx.*$ ;
注:匹配优先级:精确匹配 > 左侧通配符匹配 > 右侧通配符匹配 > 正则表达式匹配
root指令与alias指令区别
root指令用于静态资源目录位置,它可以写在 http 、 server 、 location 等配置中,root指令定义的路径会与 URI 叠加产生最终访问路径,如:
location /image { root /opt/nginx/static; } # 当用户访问 www.test.com/image/1.png 时,实际在服务器找的路径是 /opt/nginx/static/image/1.png
alias也是指定静态资源目录位置,但只能访问指定的绝对路径,不会叠加目录,只能写在 location 中且末尾一定要添加 / , 如:
location /image { alias /opt/nginx/static/image/; } #当用户访问 www.test.com/image/1.png 时,实际在服务器找的路径是 /opt/nginx/static/image/1.png
location匹配路径
格式:
location [ = | ~ | ~* | ^~ ] uri { ... }
匹配规则:
= 精确匹配;
~ 正则匹配,区分大小写;
~* 正则匹配,不区分大小写;
^~ 匹配以某个字符串开头,不是正则匹配;
/ 通用匹配,如果没有其它匹配,任何请求都会匹配到
注:匹配优先级:= > ^~ > ~ > ~* > 不带任何字符。
示例
server { listen 80; server_name www.nginx-test.com; # 只有当访问 www.nginx-test.com/match_all/ 时才会匹配到/usr/share/nginx/html/match_all/index.html location = /match_all/ { root /usr/share/nginx/html index index.html } # 当访问 www.nginx-test.com/1.jpg 等路径时会去 /usr/share/nginx/images/1.jpg 找对应的资源 location ~ \.(jpeg|jpg|png|svg)$ { root /usr/share/nginx/images; } # 当访问 www.nginx-test.com/bbs/ 时会匹配上 /usr/share/nginx/html/bbs/index.html location ^~ /bbs/ { root /usr/share/nginx/html; index index.html index.htm; } } # 注意: location / { root html; index index.html index.htm; } # 其/不是根目录而是统统都匹配到指定路径,而指定路径为html ,即nginx的默认网页目录/usr/share/nginx/html
uri中的斜线,如:
location /test { # 尾部无/ ... } location /test/ { ... }
不带 / 当访问 http://www.nginx-test.com/test 时, Nginx 先找是否有 test 目录,如果有则找 test 目录下的 index.html ;如果没有 test 目录, nginx则会找是否有 test 文件。
带 / 当访问 http://www.nginx-test.com/test 时, Nginx先找是否有 test 目录,如果有则找 test 目录下的 index.html ,如果没有它也不会去找是否存在 test 文件。
nginx.conf 配置文件的语法规则
配置文件由指令与指令块构成
每条指令以 “;” 分号结尾,指令与参数间以空格符号分隔
指令块以 {} 大括号将多条指令组织在一起
include 语句允许组合多个配置文件以提升可维护性
通过 # 符号添加注释,提高可读性
通过 $ 符号使用变量
部分指令的参数支持正则表达式,例如常用的 location 指令
实验操作
实验1
快速搭建网站
[root@server ~]# yum install nginx -y
echo "welcome to www.openlab.com" > /usr/share/nginx/html/index.html # 写入网页数据
[root@server ~]# systemctl restart nginx
# 打开windows中打开火狐浏览器输入主机IP测试
# 或者推过curl命令查看网站的网页数据,验证网站是否能访问
[root@server ~]# curl 127.0.0.1
welcome to www.openlab.com
实验2
替换网页目录
[root@server ~]# yum install nginx -y
# 新建网页存储目录
[root@server ~]# mkdir -p /www/sxhkt # 网页存储目录不能放在/root下
# 使用xftp将windows端的sxhkt文件夹中的数据上传到Linux端的/www/sxhkt目录内
[root@server ~]# vim /etc/nginx/nginx.conf
# 定位第42行,修改如下:
root /www/sxhkt;
[root@server ~]# systemctl restart nginx # 重启服务
# 测试:打开windows端浏览器输入服务端IP地址
实验3
搭建网站使用花生壳的内网穿透实现公网访问
-
第一步:准备工作
# 恢复快照
[root@server ~]# setenforce 0
[root@server ~]# systemctl stop firewalld
[root@server ~]# systemctl disable firewalld
[root@server ~]# yum install nginx -y
[root@server ~]# systemctl start nginx
[root@server ~]# systemctl enable nginx
-
第二步:搭建网站
# 新建网页存储目录
[root@server ~]# mkdir /www/zy
# 使用xftp将zy网站数据上传到linux的/www/zy目录中
[root@server ~]# vim /etc/nginx/nginx.conf
# server端中启用location模块
server {
listen 80;
listen [::]:80;
server_name _;
location / {
root /www/zy;
index index.html index.htm;
}
[root@server ~]# systemctl restart nginx # 重启服务
# 测试:打开windows端浏览器输入服务端IP地址
-
第三步:使用花生壳进行内网穿透
# 注册,登录,完成身份证的实名认证
# 内网穿透第一步 # 创建内网映射,如下: # 应用名称:自定 # 映射类型:https # 外网域名:系统指定,不能更改 # 外网端口:443,默认 # 内网主机:本机linux服务的IP地址 # 内网端口:本地linux端的http端口,默认80
# 内网穿透第二步,linux系统安装花生壳客户端 # 下载客户端,选择应用平台为RedHat ,“点击复制”
# 客户端下载: [root@server ~]# yum install net-tools -y # 安装网络工具包可以使用netstat [root@server ~]# wget "https://dl.oray.com/hsk/linux/phddns_5.2.0_amd64.rpm" -O phddns_5.2.0_amd64.rpm # 客户端安装 [root@server ~]# rpm -ivh phddns_5.2.0_amd64.rpm # 启动 [root@server ~]# phddns start # 复制下图“右下角的网址” # 重新打开浏览器,输入http://b.oray.com,完成账户登录,激活
# 登录激活后花生壳的管理平台效果:
# 点击绿色公网域名访问网站:https://40a09234i8.imdo.co/
使用cpolar实现内网穿透
使用nginx建立网站
实验4
搭建密码验证功能来访问网站数据
-
第一步:准备工作
# 恢复快照
[root@server ~]# setenforce 0
[root@server ~]# systemctl stop firewalld
[root@server ~]# systemctl disable firewalld
[root@server ~]# yum install nginx httpd-tools -y
[root@server ~]# systemctl start nginx # 启动httpd
[root@server ~]# systemctl enable nginx # 设置开机启动
-
第二步:新建账户
[root@server ~]# useradd t1
[root@server ~]# passwd t1
更改用户 t1 的密码 。
新的密码: # 123456
无效的密码: 密码少于 8 个字符
重新输入新的密码:
passwd:所有的身份验证令牌已经成功更新。
-
第三步:增加密码访问控制
[root@server ~]# htpasswd -c /etc/nginx/passwd t1
New password: # 密码123456
Re-type new password:
Adding password for user t1
# htpasswd:生成密码数据的命令
# -c:表示第一次生成,会创建存储密码的文件,第二次创建密码时不能增加-c参数,否则会覆盖
# /etc/httpd/passwd : 存储访问网站的密码文件,passwd为文件名,名称可以自定
# t1:需要验证密码访问的账户名称
-
第四步:设置访问网站时需要验证密码
[root@server ~]# mkdir /www
# 使用xftp将zy网页上传到/www
[root@server ~]# vim /etc/nginx/nginx.conf
server {
listen 80;
listen [::]:80;
root /www/zy;
autoindex on; # 开启目录访问列表
auth_basic "Please input password";
auth_basic_user_file /etc/nginx/passwd;
[root@server ~]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
-
第九步:重启服务,测试
[root@server ~]# systemctl restart nginx
# windows打开浏览器输入192.168.48.130时有验证密码的对话框弹出,输入密码验证访问
实验5
新建文件目录列表的网站,用于下载数据
-
第一步:安装nginx
# 恢复快照
[root@server ~]# setenforce 0
[root@server ~]# systemctl stop firewalld
[root@server ~]# systemctl disable firewalld
[root@server ~]# yum install nginx -y
[root@server ~]# systemctl start nginx # 启动httpd
[root@server ~]# systemctl enable nginx # 设置开机启动
-
第二步:配置文件
[root@server ~]# vim /etc/nginx/nginx.conf
server {
listen 80;
listen [::]:80;
root /vat/log; # 选择一个开放的目录用于查看并下载
autoindex on; # 开启目录访问列表
-
第三步:重启服务测试
[root@server ~]# systemctl restart nginx
虚拟主机功能
概述
如果每台运行 Linux 系统的服务器上只能运行一个网站,那么人气低、流量小的草根站长就要被迫承担着高昂的服务器租赁费用了,这显然也会造成硬件资源的浪费。在虚拟专用服务器(Virtual Private Sever,VPS)与云计算技术诞生以前,IDC 服务供应商为了能够更充分地利用服务器资源,同时也为了降低购买门槛,于是纷纷启用了虚拟主机功能
利用虚拟主机功能,可以把一台处于运行状态的物理服务器分割成多个“虚拟的服务器”。但是,该技术无法实现目前云主机技术的硬件资源隔离
nginx务器基于用户请求的不同 IP 地址、主机域名或端口号,实现提供多个网站同时为外部提供访问服务的技术,也就是说用户请求的方式不同,最终获取到的网页内容也各不相同
基于 IP 地址的虚拟主机
原理
如果一台服务器有多个IP地址,而且每个IP地址与服务器上部署的每个网站一一对应,当用户请求的IP地址不同,则会访问到不同网页,且每个网站都有一个独立的IP地址。(常用)
注意:主机必须有多个IP地址
实验6
增加多个IP地址,实现基于不同IP地址的虚拟主机功能
-
第一步:准备工作
# 恢复快照
[root@server ~]# setenforce 0
[root@server ~]# systemctl stop firewalld
[root@server ~]# systemctl disable firewalld
[root@server ~]# yum install nginx -y
[root@server ~]# systemctl start nginx # 启动httpd
[root@server ~]# systemctl enable nginx # 设置开机启动
# 给网卡增加2个IP地址
[root@server ~]# nmcli c modify ens32 +ipv4.addresses 192.168.48.150/24
[root@server ~]# nmcli c modify ens32 +ipv4.addresses 192.168.48.151/24
[root@server ~]# nmcli c reload
[root@server ~]# nmcli c up ens32
连接已成功激活(D-Bus 活动路径:/org/freedesktop/NetworkManager/ActiveConnection/2)
[root@server ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens32: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 00:0c:29:ad:e9:7a brd ff:ff:ff:ff:ff:ff
inet 192.168.48.130/24 brd 192.168.48.255 scope global noprefixroute ens32
valid_lft forever preferred_lft forever
inet 192.168.48.150/24 brd 192.168.48.255 scope global secondary noprefixroute ens32
valid_lft forever preferred_lft forever
inet 192.168.48.151/24 brd 192.168.48.255 scope global secondary noprefixroute ens32
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:fead:e97a/64 scope link noprefixroute
valid_lft forever preferred_lft forever
-
第二步:新建2个存储网页的目录,写入网页文件
[root@server ~]# mkdir -p /www/ip150
[root@server ~]# mkdir -p /www/ip151
[root@server ~]# echo "ip150" > /www/ip150/index.html
[root@server ~]# echo "ip151" > /www/ip151/index.html
-
第三步:修改配置文件,建立基于IP地址的虚拟主机
# 在/etc/nginx/conf.d目录下建立子配置文件实现,更加精简,执行时会被主配置文件加载
[root@server ~]# vim /etc/nginx/conf.d/vshost.conf # 添加以下内容
server {
listen 80;
server_name 192.168.48.150;
root /www/ip150;
}
server {
listen 80;
server_name 192.168.48.151;
root /www/ip151;
}
-
第四步,重启服务,测试
[root@server ~]# nginx -t
[root@server ~]# systemctl restart nginx # 重启服务
[root@server ~]# curl 192.168.48.150 # 测试网页
ip150
[root@server ~]# curl 192.168.48.151
ip151
基于端口号的虚拟主机
原理
基于端口号的虚拟主机功能,可以让用户通过一个IP地址的不同端口号来访问不同的网站
实验7
基于不同端口的虚拟主机
-
第一步:准备工作
# 恢复快照
[root@server ~]# setenforce 0
[root@server ~]# systemctl stop firewalld
[root@server ~]# systemctl disable firewalld
[root@server ~]# yum install nginx -y
[root@server ~]# systemctl start nginx # 启动httpd
[root@server ~]# systemctl enable nginx # 设置开机启动
-
第二步:新建2个存储于网页的目录,使用xftp将网页文件上传
[root@server ~]# mkdir -p /www/port{5111,5222} # 一条语句合并建立目录
[root@server ~]# ls /www
port5111 port5222
# 使用xftp将2个网页文件sxhkt及zy上传到上述目录
-
第三步:编辑主配置文件
# 可直接在主配置文件中修改
[root@server ~]# vim /etc/nginx/nginx.conf
server {
listen 5111;
server_name _;
root /www/port5111;
error_page 404 /404.html;
location = /40x.html {
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}
server {
listen 5222;
server_name _;
root /www/port5222;
error_page 404 /404.html;
location = /40x.html {
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}
-
第四步:重启服务,测试
[root@server ~]# systemctl restart nginx # 重启服务
# 打开windows的浏览器输入192.168.48.130:5111或者192.168.48.130:5222进行测试
基于域名的虚拟主机
原理
当服务器无法给每个网站都分配一个独立的IP地址时,可以通过用户请求的域名不同实现传输不同的网页数据
域名解析:
功能:域名<==>IP地址
浏览器如何通过域名去查询URL对应的IP(对应服务器地址):
浏览器缓存:浏览器会按照一定的频率缓存DNS记录
操作系统缓存:如果浏览器缓存中找不到需要的DNS记录,那就去操作系统中的hosts文件找。hosts是一个没有扩展名的系统文件,其作用就是将一些常用的网址域名与其对应的IP地址建立一个关联"数据库",当用户在浏览器中输入一个需要登录的网址时,系统会首先自动从Hosts文件中寻找对应的IP地址,一旦找到,系统会立即打开对应网页,如果没有找到,则系统会再将网址提交DNS域名解析服务器进行IP地址的解析。
windows下的hosts文件路径:C:\Windows\System32\drivers\etc\hosts
Linux下的hosts文件路径:/etc/hosts
路由缓存:路由器也有DNS缓存。
ISP的DNS服务器:ISP是互联网服务提供商(Internet Service Provider)的简称,ISP有专门的DNS服务器应对DNS查询请求
根服务器:ISP的DNS服务器还找不到的话,它就会向根服务器发出请求,进行查询(DNS服务器先问根域名服务器.com域名服务器的IP地址,然后再问.com域名服务器,依次类推)
实验8
使用2个域名建立虚拟主机网站
-
第一步:准备工作
# 恢复快照
[root@server ~]# setenforce 0
[root@server ~]# systemctl stop firewalld
[root@server ~]# systemctl disable firewalld
[root@server ~]# yum install nginx -y
[root@server ~]# systemctl start nginx # 启动httpd
[root@server ~]# systemctl enable nginx # 设置开机启动
-
第二步:新建2个存储网页文件的目录,使用xftp将网站文件上传
[root@server ~]# mkdir -p /www/zy
[root@server ~]# mkdir -p /www/sxhkt
-
第三步:手动配置IP地址与域名的映射关系
# Linux端
[root@server ~]# vim /etc/hosts
# 添加如下内容:
192.168.48.130 www.zy.com
192.168.48.130 www.sxhkt.com
# windows端,打开:
C:\Windows\System32\drivers\etc\hosts文件,添加如下内容:
192.168.48.130 www.zy.com
192.168.48.130 www.sxhkt.com
-
第四步:编辑主配置文件
[root@server ~]# vim /etc/nginx/nginx.conf
# 定位第1行,添加:
server {
listen 80;
server_name www.zy.com; # 重点,需要写域名
root /www/zy;
error_page 404 /404.html;
location = /40x.html {
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}
server {
listen 80;
server_name www.sxhkt.com;
root /www/sxhkt;
error_page 404 /404.html;
location = /40x.html {
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}
-
第五步:重启服务,测试
[root@server ~]# systemctl restart nginx # 重启服务
# windows端打开浏览器输入域名测试