Linux综合大实验(高可用的WEB业务系统)

Linux大实验记录

结合Nginx、keepalived、ansible、zabbix、iptables、LVS、NFS、MysqlRoute、Django、Python创建一个高可用的WEB业务系统

项目需要达到的效果

   1、 外网所有机器只能ssh到堡垒机(ssh_server),通过堡垒机对其他机器进行ssh连接,并且所有内网机器除堡垒机和ansible机外不能互相ssh连接(设置ssh黑白名单即可)(完成)
    2、所有内网机器能进行上网,外部访问内部服务器通过路由器A进行转发到各个负载均衡器,再通过相关规则(如轮询)进行传递到对应服务器(完成)

正在更新,未完待续......

2019.4.3

 

此处附上拓扑图

 

在两台台式机上分别创建一个1810版本的Centos7(用来克隆出其他所需要的服务器)

一、在Linux里进行基本服务关闭以及其他的习惯性的操作

1、下载vim编辑器

[root@localhost ~]# yum install vim -y

2、下载相关网络命令的包net-tools

[root@localhost ~]# yum install net-tools -y

3、设置快捷键

[root@localhost ~]# vim ~/.bashrc

添加快捷键(个人习惯用”c”代替clear,方便清屏)

4、关闭开机自启的selinux

[root@localhost ~]# vim /etc/selinux/config

如下图,将SELINUX设置为disabled

5、关闭开机自启的firewalld

[root@localhost ~]# systemctl disable firewalld

重启后查看是否禁止开机自启firewalld

[root@localhost ~]# systemctl status firewalld

7、关闭开机自启的firewalld

[root@localhost ~]# systemctl disable firewalld

重启后查看是否禁止开机自启firewalld

[root@localhost ~]# systemctl status firewalld

8、永久添加某些iptables规则

[root@Firewall ~]# iptables -t nat -A POSTROUTING -s 192.168.58.254/24 -o ens33 -j SNAT --to-source 192.168.0.236

[root@Firewall ~]# service iptables save

9、永久开启路由转发功能

[root@Route_A ~]# echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf

10、在开机自启文件里添加相关的开机自启规则

[root@Route_A ~]# vim /etc/rc.local

设置好后还需要给这个文件权限,设置开机自启

[root@Route_A ~]# chmod +x /etc/rc.d/rc.local

                                                         ansible_server配置

1、在ansible主机上生成密钥对

[root@ansible_server ~]# ssh-keygen -t ecdsa

2、上传公钥到node1和node2节点服务器的root用户的家目录下面

[root@ansible_server ~]# cd .ssh/

[root@ansible_server .ssh]# ls

id_ecdsa id_ecdsa.pub

把公钥传到78、79两台节点服务器

[root@ansible_server .ssh]# ssh-copy-id -i id_ecdsa.pub root@192.168.59.80

3、测试免密码登录是否成功

[root@ansible_server ~]# ssh root@192.168.59.80

依次完成所有的内网服务器连接

或者

生成公钥

[root@ansible_server ~]# ssh-keygen

传输公钥,进行免秘钥操作

[root@ansible_server ~]# ssh-copy-id root@192.168.59.22

完成操作

 

                                                                           外网连接内网ssh设置

只允许连接堡垒机

先在防火墙上面做DNAT

[root@Firewall ~]# iptables -t nat -A PREROUTING -i ens33 -d 192.168.0.236 -p tcp --dport 22 -j DNAT --to-destination 192.168.58.1

外网进来的连接22端口的请求转发给Route_A

再在Route_A上面做DNAT把从防火墙转发进来的ssh连接转发给ssh_server

[root@Firewall ~]# iptables -t nat -A PREROUTING -i ens33 -d 192.168.58.1 -p tcp --dport 22 -j DNAT --to-destination 192.168.59.22

 

                                               禁止内网除ssh和ansible服务器以外的所有主机互相连接

[root@docker_server ~]# vim /etc/hosts.allow

添加两条允许ssh的IP

sshd:192.168.59.22

sshd:192.168.59.110

[root@docker_server ~]# vim /etc/hosts.deny

添加禁止所有的IP连接

sshd:all

 

(linux 系统会先检查/etc/hosts.deny规则,再检查/etc/hosts.allow规则,如果有冲突 按/etc/hosts.allow规则处理)

 

                                                                            配置Zabbix_server

Zabbix是分布式的,是SC架构,即server-client模式,服务器和客户机都需要装相关软件

安装zabbix服务端

此处有个脚本,一键安装,贴上脚本来源

https://www.cnblogs.com/clsn/p/7885990.html#auto_id_18

#!/bin/bash

#clsn

 

#设置解析 注意:网络条件较好时,可以不用自建yum源

# echo '10.0.0.1 mirrors.aliyuncs.com mirrors.aliyun.com repo.zabbix.com' >> /etc/hosts

 

#安装zabbix源、aliyun YUM源

curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo

rpm -ivh http://repo.zabbix.com/zabbix/3.0/rhel/7/x86_64/zabbix-release-3.0-1.el7.noarch.rpm

 

#安装zabbix

yum install -y zabbix-server-mysql zabbix-web-mysql

 

#安装启动 mariadb数据库

yum install -y  mariadb-server

systemctl start mariadb.service

 

#创建数据库

mysql -e 'create database zabbix character set utf8 collate utf8_bin;'

mysql -e 'grant all privileges on zabbix.* to zabbix@localhost identified by "zabbix";'

 

#导入数据

zcat /usr/share/doc/zabbix-server-mysql-3.0.13/create.sql.gz|mysql -uzabbix -pzabbix zabbix

 

#配置zabbixserver连接mysql

sed -i.ori '115a DBPassword=zabbix' /etc/zabbix/zabbix_server.conf

 

#添加时区

sed -i.ori '18a php_value date.timezone  Asia/Shanghai' /etc/httpd/conf.d/zabbix.conf

 

#解决中文乱码

yum -y install wqy-microhei-fonts

\cp /usr/share/fonts/wqy-microhei/wqy-microhei.ttc /usr/share/fonts/dejavu/DejaVuSans.ttf

 

#启动服务

systemctl start zabbix-server

systemctl start httpd

 

#写入开机自启动

chmod +x /etc/rc.d/rc.local

cat >>/etc/rc.d/rc.local<<EOF

systemctl start mariadb.service

systemctl start httpd

systemctl start zabbix-server

EOF

 

#输出信息

echo "浏览器访问 http://`hostname -I|awk '{print $1}'`/zabbix"

 

安装zabbix客户端

#!/bin/bash

#clsn

 

#设置解析

echo '10.0.0.1 mirrors.aliyuncs.com mirrors.aliyun.com repo.zabbix.com' >> /etc/hosts

 

#安装zabbix源、aliyu nYUM源

curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo

rpm -ivh http://repo.zabbix.com/zabbix/3.0/rhel/7/x86_64/zabbix-release-3.0-1.el7.noarch.rpm

 

#安装zabbix客户端

yum install zabbix-agent -y

#修改位允许来采集数据的服务器的ip

sed -i.ori 's#Server=127.0.0.1#Server=192.168.59.111#' /etc/zabbix/zabbix_agentd.conf

systemctl start  zabbix-agent.service

 

#写入开机自启动

chmod +x /etc/rc.d/rc.local

cat >>/etc/rc.d/rc.local<<EOF

systemctl start  zabbix-agent.service

EOF

 

检测连通性

在服务端安装zabbix-get检测

[root@zabbix_server ~]# yum install zabbix-get

2.3.2 在服务端进行测试

注意:只能在服务端进行测试

[root@zabbix_server ~]# zabbix_get -s 192.168.59.120 -p 10050 -k "system.cpu.load[all,avg1]"

[root@zabbix_server ~]# zabbix_get -s 192.168.59.120 -p 10050 -k "system.cpu.load[all,avg1]"

 

使用浏览器访问

  http://10.0.0.61/zabbix/setup.php

配置keepalived高可用

利用ansible服务器对两台LB进行keepalived下载

[root@ansible_server ~]# ansible "192.168.59.120 192.168.59.121" -m shell -a "yum install keepalived -y"

利用ansible服务器打开两台LB的keepalived

[root@ansible_server ~]# ansible "192.168.59.120 192.168.59.121" -m shell -a "service keepalived start"


并设置开机自启

[root@LB_backup ~]# echo "/etc/init.d/keepalived start" >>/etc/rc.local

[root@LB_backup ~]# chmod +x /etc/rc.d/rc.local

之后关闭keepalived

[root@ansible_server ~]# ansible "192.168.59.120 192.168.59.121" -m shell -a "service keepalived stop"

分别对主从LB进行配置

[root@LB_master ~]# vim /etc/keepalived/keepalived.conf

主节点配置信息

 

global_defs{

   notification_email {

        903211635@qq.com         #收邮件人,可以定义多个

   }

   notification_email_from kaadmin@localhost       #发邮件人可以伪装

   smtp_server 192.168.59.120    #发送邮件的服务器地址

   smtp_connect_timeout 30  #连接超时时间

   router_id LVS_DEVEL      

}

vrrp_instanceVI_1 {    #每一个vrrp_instance就是定义一个虚拟路由器的

    state MASTER         #由初始状态状态转换为master状态

    interface ens33   

    virtual_router_id 51     #虚拟路由的id号,一般不能大于255的

    priority 100     #初始化优先级 一定要比BACKUP大

    advert_int 1      #初始化通告

    authentication {     #认证机制

        auth_type PASS

        auth_pass 1111     #密码

    }

    virtual_ipaddress {      #虚拟地址vip

       192.168.59.122

    }

}

 

 

配置好保存后,重启keepalived,过几分钟就能生成一个VIP:192.168.59.122

在LB_backup上进行类似的配置,如下

vrrp_instanceVI_1 {  #每一个vrrp_instance就是定义一个虚拟路由器的

    state BACKUP   #初始化状态

    interface eth0

    virtual_router_id 51

    priority 99       #优先级,一定要比master的优先级要低

    advert_int 1

    authentication {

        auth_type PASS

        auth_pass 1111

    }

    virtual_ipaddress {

        192.168.59.122

    }

}

配置好后保存并开启keepalived

主从LB都配置好后进行实验测试BACKUP能否在MASTER挂掉之后立马拿走VIP

先关掉masrer的

[root@LB_maser ~]# service keepalived stop

查看backup的addr,发现已经拿走了,配置成功

配置keepalived负载均衡(LVS DR模式使用轮询算法)

在LB_master和LB_backup里下载ipvsadm

[root@LB_master ~]# yum isntall ipvsadm -y

 

在master上面进行配置设置VS(虚拟服务器 virtual server)和RS(真实服务器real server)

[root@LB_maser etc]# cd /etc/keepalived/

[root@LB_maser keepalived]# vim keepalived.conf

virtual_server 192.168.59.77 80 { #负载均衡配置 (重要:端口必须与realserver端口一致,不能更改)

    delay_loop 6  #每个6秒检查一次real_server状态

    lb_algo rr          #LVS算法 采用轮询算法

    lb_kind DR   #LVS模式

    persistence_timeout 5  #会话保持时间

    protocol TCP

 

    real_server 192.168.59.80 80 {

        weight 1

        HTTP_GET {

            url {

              path /

          

            }

            url {

              path /mrtg/

       state_code            }

            connect_timeout 3         #连接超时时间

            nb_get_retry 3        #重连次数

            delay_before_retry 3       #重连间隔时间

            connect_port 80               #健康检查端口

        }

    }

 

    real_server 192.168.59.81 80 {

        weight 1

        HTTP _GET {

            url {

              path /

       state_code

            }

            url {

              path /mrtg/

       state_code

            }

            connect_timeout 3           #连接超时时间

            nb_get_retry 3                   #重连次数

            delay_before_retry 3       #重连间隔时间

            connect_port 80               #健康检查端口

        }

    }

}

两台调度器做好配置后,重启service keepalived restart,即可实现2台调度器上的VIP切换(关掉机器或断掉网络或关掉keepalived都可以使VIP切换)。

查看轮询的rs

此时还需要在两台RS上面写个脚本,进行ARP毒化,内容如下

 

#/bin/bash

vip=192.168.43.82

#把vip绑定在lo上,是为了实现rs直接把结果返回给客户端

ifconfig lo:0 $vip broadcast $vip netmask 255.255.255.255 up

route add -host $vip lo:0

#以下操作为更改arp内核参数,目的是为了让rs顺利发送mac地址给客户端,又叫arp欺骗

echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore

echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce

echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore

echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce

 

 

[root@LB_master ~]# ipvsadm -ln


现在直接访问VIP(virtual IP虚拟IP)就能轮换着访问两台web服务器了

集群调度软件对比

Nginx分析

优点:工作在7层,可以针对http做分流策略;正则表达式比haproxy强大;安装、配置、测试简单,通过日志可以解决多数问题;并发量可以达到几万次;nginx还可以作为web服务器使用

缺点:仅支持http、https、mail协议,应用面小;监控检查仅通过端口,无法使用url检查

 

LVS分析

优点:负载能力强,工作在4层,对内存、CPU消耗低;配置性低,没有太多可配置性,减少认为错误;应用面广,几乎可以为所有应用提供负载均衡

缺点:不支持正则表达式,不能实现动静分离;如果网站架构庞大,LVS-DR配置比较繁琐

 

HAProxy分析

优点:支持session、cookie功能;可以通过url进行健康检查;效率、负载均衡速度,高于nginx,低于LVS;HAProxy支持TCP,可以对mysql进行负载均衡;调度算法丰富

缺点:正则弱于nginx;日志依赖于syslogd,不支持apache日志

NFS部署

NFS的工作原理

1)首先服务器端启动RPC服务,并开启111端口

2)服务器端启动NFS服务,并向RPC注册端口信息

3)客户端启动RPC(portmap服务),向服务端的RPC(portmap)服务请求服务端的NFS端口

4)服务端的RPC(portmap)服务反馈NFS端口信息给客户端。

5)客户端通过获取的NFS端口来建立和服务端的NFS连接并进行数据的传输。

 

服务端配置

1、查看系统信息

先看自己的系统版本和内核参数,因为不同版本对应的软件可能会有区别

[root@NFS_server ~]# cat /etc/redhat-release

CentOS Linux release 7.6.1810 (Core)

[root@NFS_server ~]# uname -a

Linux NFS_server 3.10.0-957.el7.x86_64 #1 SMP Thu Nov 8 23:39:32 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux

 

2、NFS相关软件安装

部署NFS服务需要装nfs-utils(NFS主程序)rpcbindRPC主程序)

其中nfs-utils包含了rpc.nfsd和rpc.mount

[root@NFS_server ~]# yum install rpcbind nfs-utils -y

安装好后查看rpc是否启动

[root@NFS_server ~]# systemctl status rpcbind


显然启动的非常成功

  1. 启动NFS之前查看一下NFS服务向PRC服务注册的端口信息

[root@NFS_server ~]# rpcinfo -p localhost

 

  1. 启动NFS服务,并设置为开机自启

[root@NFS_server ~]# systemctl start nfs

[root@NFS_server ~]# systemctl enable nfs

 

  1. 配置NFS服务

NFS服务主要是在/etc/exports这个文件里面进行配置的,默认情况下这个文件是空的

编辑好这个文件后,先启动rpcbind(若已启动无需重启),然后重启NFS就可以了

[root@NFS_server ~]# vim /etc/exports

/tmp/

[共享目录]   [客户端地址1(权限)]        [客户端地址2(权限)]

 

6、查看共享的目录

[root@NFS_server ~]# showmount -e localhost

7、查看配置的信息

[root@NFS_server ~]# exportfs -v

参数代表的意思

 

 
 

 

 

客户端配置

因为本实验是配置两个web服务器,所以用ansible服务器进行统一配置

1、安装RPC和NFC

在客户机上同样要装上nfs-utils和rpcbind

[root@ansible_server ~]# ansible "192.168.59.80 192.168.59.81" -m shell -a "yum install nfs-utils rpcbind -y"

 

2、查看NFS服务器共享出来的目录

[root@web1 html]# showmount -e 192.168.59.82

3、挂载NFS服务器上共享的/nfs-share/html目录到本地/usr/share/nginx/html

[root@web1 nginx]# mount -t nfs 192.168.59.82:/nfs-share/html /usr/share/nginx/html

 

  1. 查看挂载结果

 

5、测试挂载结果

我在NFS服务器上共享的文件夹里添加了这些文件


包括修改了404页面

至此,NFS搭载完毕

如果NFS服务器挂了,web服务器也就挂了,所以需要用zabbix进行监控,查看NFS服务器的情况

 

                                                                踩过的坑

情况1

公钥信息改变了

主要是因为换了台物理机,导致公钥密码更该,所以需要去把公钥删除,重新连接

[root@ansible_server ~]#  vim ~/.ssh/known_hosts

进去删掉失效的公钥,重新连接即可


 

情况2

出现zabbix server is not running情况(下图)

大概率是因为zbx_server的地址没有改为zabbix服务器的ip

情况3

ZABBIX忘记登录密码重置方法

[root@zabbix_server ~]#  mysql -uroot -p -e "select * from zabbix.users\G"


此处就是登录密码,只不过转成了md5格式罢了,在线转码就ok

贴一个在线转md5的链接https://www.cmd5.com/

 

情况4:

在zabbix里面查不到客户机

有可能是客户机的配置文件没有配置zabbix_server地址

sed -i.ori 's#Server=127.0.0.1#Server=192.168.59.111#' /etc/zabbix/zabbix_agentd.conf

systemctl  restart zabbix-agent.service

 

情况5

发现ansible可以ssh过去firewalld,但是不能通过ansible命令来操作firewall

最后解决办法是把hosts.allow里面的sshd:192.168.59.110(ansible服务器)替换为sshd:192.168.58.1(路由器)

但是这样很明显是不安全的,有待改进

 

 

 

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
题目名称 linux实验-基本指令1 题目关键字 linux实验-基本指令1 题目录入时间 2013-4-1 22:36:02 题目内容 1、root帐号登录,查看/tmp目录,如果/tmp目录下没有子目录myshare,则建立该目录。 2、创建帐号testuser。 3、把myshare目录及其目录下的所有文件和子目录的拥有者该为testuser,工作组改为users。 4、切换至testuser帐号。进入/tmp/myshare目录,采用vim编辑器编写以上程序,程序名称为hello.sh: #!/bin/bash echo "app start" echo -e func (){ echo "hello world!" } func echo -e echo "app end" 5、保存hello.sh后,给予hello.sh拥有者可读、可写和可执行的权限,同组可读可执行,其他人可执行权限。 6、输入./hello.sh,观察程序输出的效果。 7、进入testuser的用户主目录,在这个目录下创建hello.sh的软链接,同时拷贝hello.sh到该目录下并改名为hello.sh.bak,要求拷贝时保留文件属性值。 8、退出testuser帐号,回到root帐号,从/开始查找后缀名为.conf的所有文件,把输出结果重定向到testuser帐号的主目录下的output.txt文件。 9、在上一步操作的.conf文件中找出文件容量最大的和最小那个,并把这两个文件的容量大小输出到output.txt文件中。 10、统计出系统中有多少个用户帐号,把数量输出到output.txt文件中。 11、把output.txt文件转换为windows记事本可正规打开的格式。 12、tar打包压缩testuser帐号主目录下的所有文件。 13、用U盘把上一步打包压缩文件拷贝到U盘上。 14、执行userdel -r testuser,执行rm -fr myshare 题目创建人 题目注释 把打包压缩文件提交即可。 题目名称 linux-课题练习1 题目关键字 linux-课题练习1 题目录入时间 2013-4-15 12:21:53 题目内容 1、创建组testgroup; 2、创建用户a2012,先采用默认设置创建,然后使该用户加入testgroup组。 3、创建用户a2013,其用户主目录为/tmp/a2013,其主组为testgroup,附加组为users。 4、用id命令显示a2012和a2013用户信息,并且把这些信息记录到日志文件/tmp/test.log中。 5、参考书本98-99页crontab命令内容,使用root执行crontab -e,编写时程表,完成每隔5分钟把当前时间追加进/tmp/test.log中。 6、执行crontab -l,把输出内容追加进/tmp/test.log。 7、待完成2次时间记录追加后,执行crontab -r删除当前的时程表。 8、把/tmp/test.log拷贝到windows中(注意文本格式的转换),采用记事本打开,看是否看到完整内容。 题目创建人 题目注释 课题练习,做完后直接把test.log文件提交上来。 题目名称 linux课后作业1 题目关键字 linux课后作业1 题目录入时间 2013-5-6 10:23:32 题目内容 完成课本实验6第一题:菜单驱动程序。 题目创建人 题目注释 本题为当天提交,把程序文件以附件形式提交即可。 题目名称 linux shell程序设计实验1 题目关键字 linux shell程序设计实验1 题目录入时间 2013-5-6 10:25:36 题目内容 完成课本实验6的第2题,要有输入错误处理。 题目创建人 题目注释 把程序文件以附件形式提交即可。 题目名称 linux shell程序设计实验2 题目关键字 linux shell程序设计实验2 题目录入时间 2013-5-6 10:26:43 题目内容 按要求完成课本实验7。 题目创建人 题目注释 把3个程序文件打包提交即可。 题目名称 linux gcc实验 题目关键字 linux gcc实验 题目录入时间 2013-5-20 14:27:52 题目内容 课本实验8第2题 题目创建人 题目注释 请提交Makefile文件 题目名称 Linux下MYSQL操作 题目关键字 MYSQL实验 题目录入时间 2015-4-15 11:19:01 题目内容 1、在Linux下检查是否有mysql,如果没有,请安装。版本上必须是5.5以上,越新越好! 2、在mysql下创建数据库,名称为 testdb,内有表 linuxtest,表字段如下: userid (自己的学号),varchar 50,关键字 mysql_version (当前mysql版本号), varchar 50 linux_version (当前发行版的uname -a 返回值),varchar 100 eth0_HW (eth0物理地址),varchar 50 3、insert对应的数据到表 linuxtest 4、导出该数据库的sql文件,命名为 学号.sql 5、提交该sql文件 题目创建人 题目注释 题目名称 Linux网络实验1-wget+lynx 题目关键字 Linux网络实验1-wget+lynx 题目录入时间 2015-4-20 21:46:19 题目内容 1、让你的linux接入互联网,如果你是虚拟机安装,可以采用桥接本地网卡的方式上网(课堂上有介绍该方法)。如果你是独立安装linux请自行解决。配置好IP地址和网关,DNS设置两个(8.8.8.8和114.114.114.114)。 2、已root登录系统,创建目录webtest,进入webtest目录,分别把ifcfg-eth0文件及resolv.conf文件内容追加至result.txt,。 3、执行echo "1234567890这是分隔线0987654321" >> result.txt traceroute www.scau.edu.cn >> result.txt 4、执行wget http://www.baidu.com 5、以源码方式安装lynx 官方网站:http://lynx.isc.org/ 下载地址:http://lynx.isc.org/current/ 请选择最新版本 安装示例: wget http://lynx.isc.org/current/lynx2.8.8rel.2.tar.gz 解压lynx2.8.8rel.2.tar.gz 进入解压后的目录 依次执行 ./configure make make install 6、echo "1234567890这是分隔线0987654321" >> result.txt 7、执行whereis lynx >> result.txt 8、echo "1234567890这是分隔线0987654321" >> result.txt 9、lynx -dump http://www.baidu.com >> result.txt 10、提交result.txt文件 题目创建人 题目注释 题目名称 GTK+实验 题目关键字 GTK+实验 题目录入时间 2015-5-24 13:47:12 题目内容 GTK+实验,完成课本实验9,最后打包上传(程序源代码+可运行文件) 题目创建人 题目注释 题目名称 决战Linux(1) 题目关键字 LAMP LNMP 题目录入时间 2015-4-28 22:16:03 题目内容 在LAMP、LNMP等环境下,任意挑选下列2种或以上动态网页语言,写出一个页面,读取MYSQL实验中的数据表数据。 (PHP,JSP,Perl,Python,Ruby,Go,ASP.NET) 注意:不同的动态网页语言,所要求的具体环境有可能不同,需要自行搭建。 该实验综合实验,最终需要提交综合实验报告。报告提纲大致如下: 1、实验步骤描述(有图有真像) (1)第一种动态语言 a、实验环境描述 b、系统架构图 c、相关配置总结 d、核心代码总结 e、页面效果截图 (2)第二种动态语言 (3)第三种动态语言 以下同。 2、实验总结(有对比有分析有感想) 题目创建人 题目注释
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

qq_24601199

你的鼓励将是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值