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 Welcome to F5 NGINX ;
-
左侧匹配:server_name *.Welcome to F5 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 指令