简介
www是world wide web的缩写,也就是全球信息广播的意思。通常说的上网就是使用www来查询用户 所需要的信息。www可以结合文字、图形、影像以及声音等多媒体,并通过可以让鼠标单击超链接的方 式将信息以Internet传递到世界各处去。
与其他服务器类似,当你连接上www网站,该网站肯定会提供一些数据,而你的客户端则必须要使用可 以解析这些数据的软件来处理,那就是浏览器。www服务器与客户端浏览器之间的连接图。
1、 www所用的协议: 浏览器怎样向web服务器请求数据以及服务器怎样把文档传送给浏览器呢?这就是 由http协议来定义的,(Hyper Text Transport Protocol,HTTP,超文本传输协议)。
2、www服务器需要提供可让客户端浏览的平台。目前最主流的Web服务器是Apache、Microsoft的 Internet信息服务器(Internet Information Services,IIS)和unix nginx。
3、服务器所提供的最主要数据是超文本标记语言(Hyper Text Markup Language,HTML)、多媒体 文件(图片、影像、声音、文字等,都属于多媒体或称为超媒体),HTML只是一些纯文本数据,通过所谓 的标记来规范所要显示的数据格式。
4、客户端收到服务器的数据之后需要软件解析服务器所提供的数据,最后将效果呈现在用户的屏幕上。那 么著名的浏览器就有内建在Windows操作系统内的IE浏览器了,还有Firefox浏览器和Google的 chrome浏览器。
2、web服务器的类型
(1)仅提供用户浏览的单向静态网页 单纯是由服务器单向提供数据给客户端,Server不需要与client端有互动,所以你可以到该网站上去浏 览,但是无法进行数据的上传。
(2)提供用户互动接口的动态网站 这种类型的网站可以让服务器与用户互动,常见的例如留言板,博客。这种类型的网站需要通过“网页程 序语言”来实现与用户互动的行为。
3、web服务器基本配置 服务器端:此处使用nginx提供web服务,RPM包获取:http://nginx.org/packages/
[root@localhost ~]# dnf install nginx -y
[root@localhost ~]# nginx -v
[root@localhost ~]# nginx -V
[root@localhost ~]# rpm -ql nginx
4、虚拟主机配置实战
实验1:搭建一个web服务器,访问该服务器时显示“hello world”欢迎界面 。
[root@localhost ~]# echo "hello world" > /usr/share/nginx/html/index.html
[root@localhost ~]# curl localhost
hello world
[root@localhost ~]# curl 192.168.59.142
hello world
实验2:建立两个基于ip地址访问的网站,要求如下
该网站ip地址的主机位为100,设置首页目录为/www/ip/100,网页内容为:this is 100。
该网站ip地址主机位为200,设置首页目录为/www/ip/200,网页内容为:this is 200。
#添加IP地址
[root@localhost ~]# nmcli connection up ens160
#创建两个网页文件根目录,并定义网页内容
[root@localhost ~]# mkdir -pv /www/ip/{100,200}
[root@localhost ~]# echo this is 100 > /www/ip/100/index.html
[root@localhost ~]# echo this is 200 > /www/ip/200/index.html
#关闭防火墙
#设置selinux,必须设置,否则无法看到网页页面内容
[root@server html]# setenforce 0
[root@server html]# getenforce
Permissive
[root@client conf.d]# cat testip.conf
server {
listen 192.168.168.100:80;
server_name _;
root /www/ip/100;
include /etc/nginx/default.d/*.conf;
location / {
}
}
server {
listen 192.168.168.200:80;
root /www/ip/200;
location / {
}
}
#查看文件编辑语法是否有错
nginx -t
#重启nginx
[root@localhost ~]# systemctl restart nginx
#访问
[root@localhost ~]# curl 192.168.168.100
this is 100
[root@localhost ~]# curl 192.168.168.200
this is 200
(3)建立两个基于不同端口访问的网站
要求如下:
- 建立一个使用web服务器默认端口的网站,设置网站首页目录为/www/port/80,网页内容为:the port is 80。
- 建立一个使用10000端口的网站,设置网站首页目录为/www/port/10000,网页内容为:the port is 10000。
#新建IP地址
nmtui
[root@localhost ~]# nmcli connection up ens160
[root@localhost ~]# mkdir -pv /www/port/{80,10000}
[root@localhost ~]# echo the port is 80 > /www/port/80/index.html
[root@localhost ~]# echo the port is 10000 > /www/port/10000/index.html
#配置文件
[root@client conf.d]# cat testport.conf
server {
listen 192.168.59.123:80;
server_name _;
root /www/port/80;
location / {
}
}
server {
listen 192.168.59.123:10000;
root /www/port/10000;
location / {
}
}
#查看文件编辑语法是否有错
nginx -t
[root@localhost ~]# systemctl restart nginx
[root@localhost ~]# curl 192.168.168.153:10000
the port is 10000
[root@localhost ~]# curl 192.168.168.153
the port is 80
(4)建立两个基于域名访问的网站
要求如下:
- 新建一个网站,域名为www.ceshi.com,设置网站首页目录为/www/name,网页内容为this is test。
- 新建一个网站,域名为rhce.first.day,同时可通过ce.first.day访问,设置网站首页目录为/www/ce,网页内容为:today is first day of class。
[root@localhost ~]# mkdir /www/{name,ce}
[root@localhost ~]# echo this is test > /www/name/index.html
[root@localhost ~]# echo today is first day of class > /www/ce/index.html
[root@localhost ~]# vim /etc/nginx/conf.d/test_servername.conf
server {
listen 192.168.59.142:80;
server_name www.ceshi.com;
root /www/name;
location / {
}
}
server {
listen 192.168.59.142:80;
server_name rhce.first.day ce.first.day;
root /www/ce;
location / {
}
}
[root@localhost ~]# vim /etc/hosts
192.168.168.154 www.ceshi.com rhce.first.day ce.first.day
[root@localhost ~]# systemctl restart nginx
[root@localhost ~]# curl www.ceshi.com
this is test
[root@localhost ~]# curl rhce.first.day
today is first day of class
[root@localhost ~]# curl ce.first.day
today is first day of class
(5)基于虚拟目录和用户控制的web网站
[root@localhost ~]# mkdir /www/real/
[root@localhost ~]# mkdir /www/name/testip
[root@localhost ~]# echo real-virtual > /www/real/index.html
[root@localhost ~]# echo test > /www/name/testip/index.html
[root@client conf.d]# cat nametest.conf
server {
listen 192.168.59.142:80;
server_name www.ceshi.com;
root /www/name;
location /testip {
alias /www/real;
}
}
server {
listen 192.168.59.142:80;
server_name rhce.first.day ce.first.day;
root /www/ce;
location / {
}
}
[root@localhost ~]# systemctl restart nginx
[root@localhost ~]# curl 192.168.59.142/testip/
real-virtual
#用户访问控制
[root@client conf.d]# cat nametest.conf
server {
listen 192.168.59.142:80;
server_name www.ceshi.com;
root /www/name;
location /testip {
alias /www/real;
auth_basic on;
auth_basic_user_file /etc/nginx/conf.d/authuser-file;
}
}
server {
listen 192.168.59.142:80;
server_name rhce.first.day ce.first.day;
root /www/ce;
location / {
}
}
[root@localhost ~]# dnf install httpd-tools -y
[root@localhost ~]# htpasswd -cb /etc/nginx/conf.d/auth-password user1
123456
[root@localhost ~]# systemctl restart nginx
[root@localhost ~]# curl www.ceshi.com/testip/ -u user1
Enter host password for user 'user1':
real-virtual
[root@localhost ~]# curl user1:123456@www.ceshi.com/testip/
real-virtual
5.HTTPS
(1)https安全通信工作流程
[1]服务器先向CA证书颁发机构认证,将自己的公钥和域名发给CA
[2]CA将收到的信息进行hash算法,再用私钥加密得到数字签名;后给服务器颁发一个证书,包括hash算法,服务器的公钥,服务器的域名,数字签名
[3]当客户端访问服务器时,服务器将自己的证书发给客户端
[4]客户端收到后进行验证:通过数字签名来确认服务器证书中的服务器公钥是服务器的公钥
客户端用CA的公钥解密数字签名得到信息,再用hash算法加密服务器公钥,两者进行对比
如果一样,那么确定服务器的公钥是正确的
注意:我们在安装浏览器的时候已经内置了公共合法的CA机构的证书了
[5]客户端就可以用服务器的公钥对两人协商的对称密钥进行加密
(2)https网站配置
#新建IP地址
nmtui
[root@localhost ~]# nmcli connection up ens160
[root@localhost ~]# mkdir -pv /www/https/
[root@localhost ~]# echo https > /www/https/index.html
#key是私钥文件
[root@localhost conf.d]# openssl genrsa -out /etc/pki/tls/certs/https.key
#crt是由证书颁发机构(CA)签名后的证书,或者是开发者自签名的证书,包含证书持有人的信息,持
有人的公钥,以及签署者的签名等信息
[root@localhost conf.d]# openssl req -utf8 -new -key /etc/pki/tls/certs/https.key -x509 -days 100 -out /etc/pki/tls/certs/https.crt
#out生成一个crt证书
[root@client conf.d]# cat https.conf
server {
listen 192.168.59.124:443 ssl;
root /www/https;
ssl_certificate /etc/pki/tls/certs/https.crt;
ssl_certificate_key /etc/pki/tls/certs/https.key;
location / {
}
}
#注意防火墙和selinux
[root@localhost ~]# systemctl restart nginx
[root@localhost ~]# curl -k https://192.168.59.124
https
(3)搭建动态网站
动态网页:使用网页脚本语言,比如php、JSP等,通过脚本将网站内容动态存储到数据库,用户访问网站是通过读取数据库来动态生成网页的方法。(lnp)
[root@localhost ~]# dnf install php php-fpm -y
[root@client conf.d]# yum search php-fpm
#过程:nginx对接php-fpm,让其快速启动编程语言去执行php页面,生成一个html页面,再返回给客户端
[root@client ~]# cat /etc/nginx/default.d/php.conf
index index.php index.html index.htm;
location ~ \.(php|phar)(/.*)?$ {
#当匹配到{.php结尾的文件 .php/.*(.php/任意文件) .php/(.php/后不跟任何的文件)}
#或者当匹配到{.phar结尾的文件 .phar/.*(.phar/任意文件) .phar/(.phar/后不跟任何的文件)}都读下面的配置
fastcgi_split_path_info ^(.+\.(?:php|phar))(/.*)$;
fastcgi_intercept_errors on;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_pass php-fpm;
} #假设当有人匹配到php结尾的时候,要去找php-fpm server,其在/etc/nginx/conf.d/php-fpm.conf中
[root@client ~]# cat /etc/nginx/conf.d/php-fpm.conf
upstream php-fpm {
server unix:/run/php-fpm/www.sock; #当找到server后,就去找套接字文件(www.sock)
}
[root@client conf.d]# systemctl start php-fpm
#[root@localhost ~]# systemctl restart nginx php-fpm
[root@client conf.d]# ll /run/php-fpm
total 4
-rw-r--r--. 1 root root 4 Oct 26 18:33 php-fpm.pid
srw-rw----+ 1 root root 0 Oct 26 18:33 www.sock
#他已经配置好,那么我们就只需要配置index.php文件
#第一种:IP地址已经都配置完了,那么我们可以在原来的文件上修改
[root@client conf.d]# cd /www/ip/100/
[root@client 100]# ll
total 4
-rw-r--r--. 1 root root 12 Oct 23 20:53 index.html
[root@client 100]# cat index.php
hahahahaha
[root@client conf.d]# cat testip.conf
server {
listen 192.168.59.100:80;
server_name _;
root /www/ip/100;
include /etc/nginx/default.d/*.conf; #照着/etc/nginx/nginx.conf文件写
location / {
}
}
server {
listen 192.168.59.200:80;
root /www/ip/200;
location / {
}
}
[root@client 100]# systemctl restart nginx
[root@client 100]# curl 192.168.59.100
hahahahaha
#第二种:创建新的IP地址 因为没有给IP地址配置server,默认读取/etc/nginx/default.d/php.conf文件,里面的location就会自动匹配到php文件,我们只需把文件写在默认目录/usr/share/nginx/html下(/etc/nginx/nginx.conf文件中查看)
[root@client 100]# cat /usr/share/nginx/html/index.php
<?php phpinfo(); ?>
[root@client 100]# curl 192.168.59.124