• nginx部署wordpress负载均衡


    nginx部署wordpress架构

    实验环境 

    (nginx)         10.20.20.3    
    (WordPress nginx   PHP) 10.20.20.4     10.20.20.5    
    (mysql   主从)     10.20.20.6     10.20.20.7
     
    查看WordPress支持的mysql版本
     

    数据库主从设置  

    安装依赖包
    yum install libaio* -y
     
    官网下载包  二进制安装
    脚本安装   #脚本练习我QQ 790827253
    传入包  安装mysql
    10.20.20.6 (主)     10.20.20.7(从)
     
    主 配置
    vim /etc/my.cof
     
    #master
    [mysqld]
    socket=/var/lib/mysql/mysql.sock
    user=mysql
    symbolic-links=0
    datadir=/data/mysql
    innodb_file_per_table=1
    server-id=1
    log-error=/data/mysql/mysql_error.txt
    log-bin=/data/mysql/master-log
     
    [client]
    port=3306
    socket=/var/lib/mysql/mysql.sock
     
    [mysqld_safe]
    log-error=/var/log/mysqld.log
    pid-file=/tmp/mysql.sock
     
     
     
    创建库用户
    create database test1;
    GRANT REPLICATION SLAVE,REPLICATION CLIENT ON *.* TO 'dbb'@'10.20.20.%' IDENTIFIED BY '123456';
    grant replication slave on *.* to "dbb"@"10.20.20.%" identified  by '123456';
    如果主数据库之前有数据 要把数据导出来然后让从数据库同步
    要把日志改成数据大的时候
    导出文件
    /usr/local/mysql/bin/mysqldump   --all-databases  --single_transaction --flush-logs --master-data=2 --lock-tables > /opt/backup.sql
    传入从
    scp /opt/backup.sql  10.20.20.7:/opt/
     
    /etc/init.d/mysqld  restart
     
    查看二进制日志
     
     
    从配置
    vim /etc/my.cof
    #slave
    [mysqld]
    socket=/var/lib/mysql/mysql.sock
    user=mysql
    symbolic-links=0
    datadir=/data/mysql
    innodb_file_per_table=1
    server-id=10
    #log-bin=/data/mysql/master-log
    relay-log = /data/mysql
     
    [client]
    port=3306
    socket=/var/lib/mysql/mysql.sock
     
    [mysqld_safe]
    log-error=/var/log/mysqld.log
    pid-file=/tmp/mysql.sock
     
     
    #mysql  < /opt/backup.sql #slave 导入sql文件数据
     
    CHANGE MASTER TO   MASTER_HOST='10.20.20.6',MASTER_USER='dbb',MASTER_PASSWORD='123456',MASTER_LOG_FILE='master-log.000002',MASTER_LOG_POS=950;
     
    验证
    show  databases;
    start  slave ;
    show slave statusG
     
    主从复制的问题
    1  防火墙是否关闭
    2  日志一定要同步到正确的时候
    3 使用reset slave 清除同步信息  reset maser
     
     
    (WordPress nginx)10.20.20.4     10.20.20.5   

    php安装

    安装依赖包
    yum install -y gcc gcc-c++  make zlib zlib-devel pcre pcre-devel  libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel glibc glibc-devel glib2 glib2-devel bzip2 bzip2-devel ncurses ncurses-devel curl curl-devel e2fsprogs e2fsprogs-devel krb5 krb5-devel openssl openssl-devel openldap openldap-devel nss_ldap openldap-clients openldap-servers
     
    yum -y install wget vim pcre pcre-devel openssl openssl-devel libicu-devel gcc gcc-c++ autoconf libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel zlib zlib-devel glibc glibc-devel glib2 glib2-devel ncurses ncurses-devel curl curl-devel krb5-devel libidn libidn-devel openldap openldap-devel nss_ldap jemalloc-devel cmake boost-devel bison automake libevent libevent-devel gd gd-devel libtool* libmcrypt libmcrypt-devel mcrypt mhash libxslt libxslt-devel readline readline-devel gmp gmp-devel libcurl libcurl-devel openjpeg-devel
     
     
    下载包
    wget
    增加用户
    useradd www
    编译
    ./configure  --prefix=/usr/local/php --with-config-file-path=/usr/local/php/etc --with-config-file-scan-dir=/usr/local/php/etc/conf.d --enable-fpm --with-fpm-user=www --with-fpm-group=www --with-pear --with-curl  --with-png-dir --with-freetype-dir --with-iconv   --with-mhash   --with-zlib --with-xmlrpc --with-xsl --with-openssl  --with-mysqli --with-pdo-mysql --disable-debug --enable-zip --enable-sockets --enable-soap   --enable-inline-optimization  --enable-xml --enable-ftp --enable-exif --enable-wddx --enable-bcmath --enable-calendar   --enable-shmop --enable-dba --enable-sysvsem --enable-sysvshm --enable-sysvmsg
     
    make -j 2 && make install
     
    cd /usr/local/php/etc/
    [root@redis-s1 etc]# pwd
    /usr/local/php/etc
    [root@redis-s1 etc]# cp php-fpm.conf.default  php-fpm.conf
     
    cd  /usr/local/php/etc/php-fpm.d/
    root@redis-s1 php-fpm.d]# pwd
    /usr/local/php/etc/php-fpm.d
    [root@redis-s1 php-fpm.d]# cp www.conf.default  www.conf
     
    vim php-fpm.conf
    vim  www.conf
    修改参数
    8   4      4   6
    pm.max_children =8
    pm.start_servers =4
    pm.min_spare_servers =4
    pm.max_spare_servers =6
    配置说明:
    pm.max_children #,子进程最大数
    pm.start_servers #,启动时的进程数
    pm.min_spare_servers #,保证空闲进程数最小值,如果空闲进程小于此值,则创建新的子进程
    pm.max_spare_servers #,保证空闲进程数最大值,如果空闲进程大于此值,此进行清理
     
    启动
    /usr/local/php/sbin/php-fpm
     
     
    (WordPress nginx)10.20.20.4     10.20.20.5   

    安装nginx

     
    配置官方yum源
    或者编译安装
    俩个服务器都是一样的配置
     
    编译安装过程
    cd /usr/local/scr/
    传入安装包 1.12
    解压缩
    tar xvf
    cd   进去  编译
    ./configure --prefix=/usr/local/nginx  --with-pcre  --with-http_stub_status_module --with-http_ssl_module
    make && make install
    配置文件在
    /usr/local/nginx/conf/nginx.conf
     
    #mkdir /data/nginx/wordpress –p
    #chown  www.www /usr/local/nginx/ /data/nginx/ -R
    location / {
                root   /code/wordpress;
                index   index.php index.html index.htm;
                if ($http_user_agent ~ "ApacheBench|WebBench|TurnitinBot|Sogou web spider|Grid Service") {
                    proxy_pass http://www.baidu.com;
                    return 403;
                }
            }
    location ~ .php$ {
                root          /code/wordpress;
                fastcgi_pass   127.0.0.1:9000;
                fastcgi_index  index.php;
                fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
                 include        fastcgi_params;
            }
     
     
     
     
    1.4:创建php测试页:
    # cat /data/nginx/wordpress/index.php
    <?php
      phpinfo();
    ?>
     
    1.6:准备数据库:
    mysql>  CREATE DATABASE wordpress;
    创建的用户是负载均衡的ip地址  这里是0.20.20.3  
    mysql> GRANT ALL PRIVILEGES ON *.* TO "dbb"@"10.20.20.%"  IDENTIFIED BY "123456";
     
    mysql> FLUSH PRIVILEGES;
     
    部署WordPress:
    [root@redis-s4 wordpress]# pwd
    /data/nginx/wordpress
    # tar  xvf wordpress-5.0.1-zh_CN.tar.gz
    # mv wordpress-5.0.1-zh_CN.tar.gz  /opt
    # cp wp-config-sample.php  wp-config.php
    #vim wp-config.php #修改数据库配置
    # grep "^[a-Z]" wp-config.php
    define('DB_NAME', 'wordpress');
    define('DB_USER', 'wordpress');
    define('DB_PASSWORD', '123456');
    define('DB_HOST', '192.168.7.103');
    define('DB_CHARSET', 'utf8');
    define('DB_COLLATE', '');
    define('AUTH_KEY',         'zY%A)<+`Qf^68kzMC-)0+bL3m!LADP-PgJ9a~-CLtk*JnJ%-OGDEi/-v*zoJx1gP');
    define('SECURE_AUTH_KEY',  '1muyi_3wR[/<}1-[2/F=Lb3`1c-+o5*!uu4-un-4!iMb!Nl|X=}Ud-<PGxkPpuse');
    define('LOGGED_IN_KEY',    '*%/!SxN}FllpDe4+_Phylp>_^jD]N$Tc9/CstL )yRvLg!+9y #l}1?Da 8}sat{');
    define('NONCE_KEY',        'mTY2Bio ;v4j^%#O>J&@Py[6TaYy+mLmbp7$[=c,l|qY9TPwSH+Kf(!PUmTE9J`c');
    define('AUTH_SALT',        '~:wkxx83`q_+bm|{MH-|CA<`>#JJGitCsed#?a^BSsm{rVC1sg;b:&/:h$f>9D.z');
    define('SECURE_AUTH_SALT', 'u%_}v`0L~#<kZ|U +st.]iNTbGq-%Bb)Ti&E<$-LMU6jtEz}X)T$MZ{@S(#DJOQp');
    define('LOGGED_IN_SALT',   'QxUBuWv[GjaGx7=VR|&.i?wTsS-Jr($}p#?y})O-N1*h$gh d cj%H-g2~HV*&ki');
    define('NONCE_SALT',       '>Lx7Vu=>R+O||Ks)cCDGO=+st|Ja&|+5GlR?F{1Vdng-q:f#:{[TIfY#EtP|1k8a');
    wp-config.php  文件中的主机不是mysql的地址而是 负载均衡的nginxip  10.20.20.3  独立的
     
    访问网站  得到的替换在下面
     
    测试并启动Nginx:
    [root@redis-s4 wordpress]# /usr/local/nginx/sbin/nginx -t
    nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
    nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
    [root@redis-s4 wordpress]# /usr/local/nginx/sbin/nginx
     
     
     
     

    推荐yum安装

    yum 安装过程
    配置yum 源 官网
    [root@wordpress yum.repos.d]#cat nginx.repo
    [nginx]
    name=nginx repo
    baseurl=http://nginx.org/packages/centos/7/$basearch/
    gpgcheck=0
    enabled=1
    修改配置文件  改用户
    vim /etc/nginx/nginx.conf  
     
    user  www;
    worker_processes  auto;
     
     
    vim /etc/nginx/nginx.conf
    server {
            server_name www.web.com;
            listen   80;
            root   /code;
            index index.php index.html;
     
            location ~ .php$ {
                root /code;
                fastcgi_pass   127.0.0.1:9000;
                fastcgi_index  index.php;
                fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
                include        fastcgi_params;
            }
    }
     
    更改目录的权限 和用户
    chown  www.www  /code/ -R
    测试页
    [root@nginx ~]# cat /code/info.php
    <?php
            phpinfo();
    ?>
     
     

    部署博客产品Wordpress

     
    1) 配置Nginx虚拟主机站点,域名为www.dbb.com
    #1.nginx具体配置信息
    [root@nginx ~]# cat /etc/nginx/conf.d/wordpress.conf
    server {
        listen 80;
        server_name www.dbb.com;
        root /code/wordpress;
        index index.php index.html;
     
        location ~ .php$ {
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
            include fastcgi_params;
        }
    }
     
    2) 重启nginx服务
    [root@nginx ~]# systemctl restart nginx
    3) 获取wordpress产品,解压并部署wordress
    [root@nginx ~]# mkdir /code
    [root@nginx ~]# cd /code
    [root@nginx code]# wget https://cn.wordpress.org/wordpress-4.9.4-zh_CN.tar.gz
    [root@nginx ~]# tar xf wordpress-4.9.4-zh_CN.tar.gz
    [root@nginx ~]# chown -R www.www /code/wordpress/
     
    tar xf wordpress-4.9.4-zh_CN.tar.gz  -C /code/
    cp wp-config-sample.php  wp-config.php
     
    cd /cxldata/www/wordpress
    vi wp-config.php
    #添加三行
    define("FS_METHOD", "direct");
    define("FS_CHMOD_DIR", 0777); 
    define("FS_CHMOD_FILE", 0777);
    wp-config.php  文件中的主机不是mysql的地址而是 负载均衡的nginxip  10.20.20.3  独立的
     
    4) 由于wordpress产品需要依赖数据库, 所以需要手动建立数据库
    [root@nginx ~]# mysql -uroot -pBgx123.com
    mysql> create database wordpress;
    mysql> exit
    create database wordpress;
    grant all on *.* to dbb@'10.20.20.3' identified  by '123456';
     
    (nginx)   10.20.20.3    
    使用nginx负载均衡
    同样安装nginx 
    安装mysql
    连接主mysql的服务器
    mysql -udeng -h10.20.20.6  -p123456
    配置负载均衡
    vim /etc/nginx/nginx.cof
    stream  {
        upstream  mysql {
              server  10.20.20.6:3306;
      }      
        server {
             listen 10.20.20.3 :3306;
             proxy_pass  mysql;
        }
    }
    启动nginx
    nginx -t
    nginx -s reload
    端口是否打开
     
    如果nginx启动错误
    nginx: [error] open() "/Var/run/Nginx.pid" failed (2: No such file or directory)
    执行
    nginx -C  /etc/nginx/nginx.cof
     
    测试在10.20.20.8  上 连接mysql 通过连接10.20.20.3来连接到主数据库 06上
    mysql -udeng -h10.20.20.3 -p123456
     
    修改8 9 上面nginx 配置文件访问网页的目录  改为PHp路径
    访问ip 测试数据库连接   10.20.20.8
    wordpress目录下放置图片的位置
    /wp-content/uploads
     
    (nginx)   10.20.20.3    
    修改配置文件
     

    实现负载均衡

    把wordpress1 上面web目录下的文件拷贝到wordpress2 下面
    或者重新在2的上面配置wordpress 和1 的上面要一样
     
    server {
            server_name  www.dbbdbb.net;
             listen   80;
           location  /  {
     
            root   /code/wordpress;
            index index.php index.html;
    }
            location ~ .php$ {
            root /code/wordpress;
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
            include        fastcgi_params;
            }
    }
     
     
    在wordpress2 上面要和wordpress1 上面nginx配置文件一样
    的代码
     
    server {
            server_name  www.dbbdbb.net;
             listen   80;
           location  /  {
     
            root   /code/wordpress;
            index index.php index.html;
    }
            location ~ .php$ {
            root /code/wordpress;
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
            include        fastcgi_params;
            }
    }
     
    访问wordpress2 的ip 查看wordpress 网站  是否和1 的一样
     
    把监听ip改成域名
    1的
    2 的
     

    做nfs  

    在3 上安装nfs
    yum install nfs-utils -y
    做目录共享
    mkdir /nfsdata/images -pv
    vim  /etc/exports
    systemctl restart  nfs
     
    在wordpress1 和2 上安装nfs-utils
    yum install nfs-utils -y
     
     
    wordoress1  上  查看挂载的目录
    showmount -e  10.20.20.3
    把目录挂载到图片的目录
    如果目录下有数据就拷走   等挂载完再考回来
    mount -t nfs10.20.20.3:/nfsdata/images   /data/nginx/wordpress/wp-content/iploads
    2 的上面也挂载一下
    并且写入文件中
    vim /etc/fstab
    或者写入
    vim /etc/rc.d/rc.local
     
    在3 上 加负载
    yum install haproxy
    /etc/nginx/conf/conf.d/*.cong:
    vim conf.d/blog.conf
    加人 ip_hash:  服务请求只在一个服务器上
     
     

    nfs的主从同步

    3 上 的主     4上的 从
    安装
    yum install nfs-utils -y
      从上要有和主上一样的目录结构
    mkdir /nfsdata/images -pv
    vim  /etc/exports
    systemctl start nfs
    将主的数据拷贝到从上面
    scp 10.20.20.3:/nfsdata/images/*  10.20.20.8:/nfsdata/images/
     
    可以在8上执行拷贝命令  也可以在别的主机上执行  跨主机执行
    做好秘钥认证
     
     
    可以使用rsync   比scp好    效验功能   已有的文件不会拷贝
    yum install rsync
     
    rsync  -avrlopg  /nfsdata/images/*  10.20.30.8:/nfsdata/images/
     
     
     
    秘钥认证
    ssh-keygen
    ssh-copy-id 10.20.20.4
     
    yum install httpd-tools -y
    攻击网站 发起请求
    查看本机的  ulimit -n
     
     

    wordpress 更新 

    3  上面
    把新版本的传进来
    解包  tar xvf
    cd wordpress
     
    把wordpress1(10.20.20.3) 上面的配置文件拷贝到  3 上面
    目录下
    scp wp-config-php 10.20.20.3:/usr/local/src/wordpress
     
    3 上 
    在wordpress目录下
     
    配置文件
    wp-config-php
    修改配置
     
    拷贝到wordpress2 下面
    scp   -r ./* 10.20.20.9:/data/nginx/wordpress
    修改权限
    chown www.www -R /data/nginx/wordpress/
     
    过程
    1 停止服务nginx
    2备份原数据或删除
    3 升级版本
    4 启动服务nginx
     
    解完包   进入目录wordpress
    打包  zip -r wordpress.zip wordpress/*
    脚本
    vim updata.sh
    #!/bin/bash
     
    ssh 10.20.20.8 "/usr/local/nginx/sbin/nginx  -s stop"
    ssh 10.20.20.8 "rm -rf /data/nginx/wordpress/*"
    scp wordpress.zip 10.20.20.8:/data
    ssh 10.20.20.8 "unzip /data/wordpress.zip -d /data/nginx/wordpress/ && /usr/local/nginx/sbin/nginx && chown www.www -R /data/nginx/wordpress/"
     
     
     
     
    学会查看网页的调试器   右键  查看元素
     
     

    总结配置文件

    wordpress1 的配置文件
    wordpress2 的一样
     
    server {
            server_name  www.dbbdbb.net;
             listen   80;
           location  /  {
     
            root   /code/wordpress;
            index index.php index.html;
    }
            location ~ .php$ {
            root /code/wordpress;
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
            include        fastcgi_params;
            }
    }
     
     
    nginx配置文件
    stream  {
          upstream  mysql  {
             server   10.20.20.6:3306;
             }
             server  {
               listen  10.20.20.16:3306;
               proxy_pass  mysql;
               }
            }
     
    server  {
          listen 80;
          server_name   blogs;
          index index.html  index.php;
          location  / {
          proxy_pass  http://blogs;
          proxy_set_header  Host $host;
          proxy_set_header X-Real-IP $remote_addr;
          proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
          proxy_next_upstream http_502 http_504 error timeout invalid_header;                        
            }
    }
     
     
    # vim /etc/nginx/conf.d/blog.conf
    upstream  blogs  {
         server  172.20.101.204:80  weight=1  max_fails=3  fail_timeout=100s;
         server  172.20.101.205:80  weight=1  max_fails=3  fail_timeout=100s;
         ip_hash;
       }
     
     
    server  {
          listen 80;
          server_name www.dengbingbings.com;
          index index.html  index.php;
          location  / {
              proxy_pass  http://blogs;
              proxy_set_header  Host $host;
              proxy_set_header X-Real-IP $remote_addr;
              proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
              proxy_next_upstream http_502 http_504 error timeout invalid_header;                    
           }
       }
    server_name    www.dbbdbb.com  3台机必须一样
     
    10.20.20.3  配置文件  终极版
    只需要这一个配置
    #调配mysql数据库的
    stream  {
          upstream  mysql  {
             server   10.20.20.5:3306;
             }
             server  {
               listen  10.20.20.3:3306;
               proxy_pass  mysql;
               }
            }
    #负载均衡wordpress
    注释掉哈希是为了体现出轮询
     
    upstream  blogs  {
             server  172.20.101.204;
             server  172.20.101.205;
            # ip_hash;
            # hash $request_uri consistent;
    server {
         listen       80;
         location / {
          proxy_pass http://blogs;
                        }
     
    }
     
     
     
     
    补充   实验过程可以切换绑定域名的ip地址来查看实验的效果
    C:WindowsSystem32Driversetc
     
     
     
    wordpress1和2 的配置文件
    [root@wordpress2 etc]#cat /etc/nginx/nginx.conf
     
    user  www;
    worker_processes  auto;
     
    error_log  /var/log/nginx/error.log warn;
    pid        /var/run/nginx.pid;
     
     
    events {
        worker_connections  1024;
    }
     
     
    http {
        include       /etc/nginx/mime.types;
        default_type  application/octet-stream;
     
        log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                          '$status $body_bytes_sent "$http_referer" '
                          '"$http_user_agent" "$http_x_forwarded_for"';
     
    server {
            server_name  www.dengbingbing.com;
            listen   80;
           location / {
             root   /code/wordpress;
             index index.php index.html;
             }
           location ~ .php$ {
             root /code/wordpress;
             fastcgi_pass   127.0.0.1:9000;
             fastcgi_index  index.php;
             fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
             include        fastcgi_params;
            }
    }
        access_log  /var/log/nginx/access.log  main;
     
        sendfile        on;
        #tcp_nopush     on;
     
        keepalive_timeout  65;
     
        #gzip  on;
     
        include /etc/nginx/conf.d/*.conf;
    }
     

    nginx 负载均衡的配置文件

    [root@nginx ~]#cat /etc/nginx/nginx.conf
    user  www;
    worker_processes  auto;
    error_log  /var/log/nginx/error.log warn;
    pid        /var/run/nginx.pid;
    events {
        worker_connections  1024;
    }
    stream  {
          upstream  mysql  {
             server   10.20.20.6:3306;
             }
             server  {
               listen  10.20.20.16:3306;
               proxy_pass  mysql;
               }
            }
    http {
        include       /etc/nginx/mime.types;
        default_type  application/octet-stream;
     
        log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                          '$status $body_bytes_sent "$http_referer" '
                          '"$http_user_agent" "$http_x_forwarded_for"';
        upstream  blogs  {
             server  172.20.101.204;
             server  172.20.101.205;
            # ip_hash;
    #       hash $request_uri consistent;
                  }                   
    server {
         listen       80;
         location / {
          proxy_pass http://blogs;
                        }
    }
        access_log  /var/log/nginx/access.log  main;
        sendfile        on;
        #tcp_nopush     on;
        keepalive_timeout  65;
        #gzip  on;
    include /etc/nginx/conf.d/*.conf;
    }
     
     
    如果要实现在一个wordpress上面添加图片  另一个没有添加图片
    访问可以看到图片和看不到图片  ,要修改wordpress后台的
    WordPress地址(URL)和 站点地址(URL)
    修改为nginx的调度服务器的地址  然后这个地址绑定到域名上
    可能会出现的问题
    修改完以后会因为密码不对进不去wordpress页面
    解决办法
    1 重新安装wordpress使俩个上面的配置都一样
    复制拷贝过去
    实验过程
    在安装完一个wordpress以后在页面创建了以后 再把wordpress的配置文件传到第二个上面

  • 相关阅读:
    apicloud教程
    apicloud教程3 (转载)
    apicloud教程2 (转载)
    apicloud教程1 (转载)
    API CLOUD 快捷键
    JS IIFE写法
    php事件驱动
    JQuery实践--Why JQuery
    Jquery实践--精读开篇
    python 实践--新闻聚合
  • 原文地址:https://www.cnblogs.com/dengbingbing/p/10263030.html
Copyright © 2020-2023  润新知