centos7 搭建keepalived+Nginx+tomcat
准备1台 192.168.2.224 安装Nginx,2台安装tomcat 192.168.2.222 192.168.2.223
1、安装Nginx:
上传pcre-8.36.tar.gz、zlib-1.2.8.tar.gz到服务器
下载地址:pcre-8.36.tar.gz https://o3cex9zsl.qnssl.com/libs/nginx/pcre-8.36.tar.gz
zlib-1.2.8.tar.gz https://o3cex9zsl.qnssl.com/libs/nginx/zlib-1.2.8.tar.gz
#######新建nginx用户和nginx组
[root@nginx]# groupadd -r nginx && useradd -r -g nginx -s /bin/false -M nginx
#######yum安装nginx必须的依赖库
[root@nginx]#yum -y install openssl openssl-devel libxml2-devel libxslt-devel perl-devel perl-ExtUtils-Embed
#######官网下载Nginx1.9.0的tar包,然后解压到服务器上
[root@nginx jason]# wget -c http://nginx.org/download/nginx-1.9.0.tar.gz
[root@nginx jason]# tar -zxf nginx-1.9.0.tar.gz && cd nginx-1.9.0
上传pcre-8.36.tar(支持Nginx的Rewrite功能)、zlib-1.2.8.tar(支持Nginx的Gzip压缩功能)
#######新建Nginx1.9.0安装时所需要的目录
[root@nginx nginx-1.9.0]# cd /var/tmp/ && mkdir -p /var/tmp/nginx/{client,proxy,fastcgi,uwsgi,scgi}
[root@nginx tmp]# mkdir -p /var/run/nginx && cd /home/jason/nginx-1.9.0
[root@nginx nginx-1.9.0]#
./configure --prefix=/usr/local/nginx --pid-path=/var/run/nginx/nginx.pid --lock-path=/var/lock/nginx.lock --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --with-http_gzip_static_module --http-client-body-temp-path=/var/tmp/nginx/client --http-proxy-temp-path=/var/tmp/nginx/proxy --conf-path=/usr/local/nginx/conf/nginx.conf --http-fastcgi-temp-path=/var/tmp/nginx/fastcgi --http-uwsgi-temp-path=/var/tmp/nginx/uwsgi --http-scgi-temp-path=/var/tmp/nginx/scgi --sbin-path=/usr/sbin/nginx
具体的含义:
[root@nginx nginx-1.9.0]make && make install
上传脚本Nginx到/etc/init.d 并赋予只读权限,将Nginx服务添加到启动项并给予开机自动启动,启动Nginx服务
Nginx
#! /bin/bash
#
# nginx - this script starts and stops the nginx daemon
#
# chkconfig: -
# description: Nginx is an HTTP(S) server, HTTP(S) reverse \
# proxy and IMAP/POP3 proxy server
#
# processname: nginx
# config: /etc/nginx/nginx.conf
# pidfile: /var/run/nginx/nginx.pid # Source function library.
. /etc/rc.d/init.d/functions # Source networking configuration.
. /etc/sysconfig/network # Check that networking is up.
[ "$NETWORKING" = "no" ] && exit nginx="/usr/sbin/nginx"
prog=$(basename $nginx) NGINX_CONF_FILE="/usr/local/nginx/conf/nginx.conf" [ -f /etc/sysconfig/nginx ] && . /etc/sysconfig/nginx lockfile=/var/lock/nginx.lock start() {
[ -x $nginx ] || exit
[ -f $NGINX_CONF_FILE ] || exit
echo -n $"Starting $prog: "
daemon $nginx -c $NGINX_CONF_FILE
retval=$?
echo
[ $retval -eq ] && touch $lockfile
return $retval
} stop() {
echo -n $"Stopping $prog: "
killproc $prog -QUIT
retval=$?
echo
[ $retval -eq ] && rm -f $lockfile
return $retval
} restart() {
configtest || return $?
stop
sleep
start
} reload() {
configtest || return $?
echo -n $"Reloading $prog: "
killproc $nginx -HUP
RETVAL=$?
echo
} force_reload() {
restart
} configtest() {
$nginx -t -c $NGINX_CONF_FILE
} rh_status() {
status $prog
} rh_status_q() {
rh_status >/dev/null >&
} case "$1" in
start)
rh_status_q && exit
$
;;
stop)
rh_status_q || exit
$
;;
restart|configtest)
$
;;
reload)
rh_status_q || exit
$
;;
force-reload)
force_reload
;;
status)
rh_status
;;
condrestart|try-restart)
rh_status_q || exit
;;
*)
echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload|configtest}"
exit
esac
[root@nginx init.d]chkconfig --add nginx
[root@nginx init.d]chkconfig nginx on
[root@nginx init.d]service nginx start
查看安装的Nginx1.9.0的详细信息
[root@nginx init.d]# nginx -V
nginx version: nginx/1.9.0
built by gcc 4.8.2 20140120 (Red Hat 4.8.2-16) (GCC)
configure arguments: --prefix=/usr/local/nginx --pid-path=/var/run/nginx/nginx.pid --lock-path=/var/lock/nginx.lock --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --with-http_gzip_static_module --http-client-body-temp-path=/var/tmp/nginx/client --http-proxy-temp-path=/var/tmp/nginx/proxy --conf-path=/usr/local/nginx/conf/nginx.conf --http-fastcgi-temp-path=/var/tmp/nginx/fastcgi --http-uwsgi-temp-path=/var/tmp/nginx/uwsgi --http-scgi-temp-path=/var/tmp/nginx/scgi --sbin-path=/usr/sbin/nginx
2、安装tomcat
查看现有版本、卸载并安装jdk1.8
[root@nginx jason]# java -version
java version "1.7.0_51"
[root@nginx jason]# rpm -qa |grep jdk
[root@nginx jason]# yum remove java-1.7.0-openjdk
[root@nginx jason]# ls
apache-tomcat-9.0.4.tar.gz Desktop Documents Downloads jdk-8u11-linux-x64.rpm Music Pictures Public Templates Videos
[root@nginx jason]# rpm -ivh jdk-8u11-linux-x64.rpm
Preparing... ################################# [100%]
Updating / installing...
1:jdk-2000:1.8.0_11-fcs ################################# [100%]
Unpacking JAR files...
rt.jar...
jsse.jar...
charsets.jar...
tools.jar...
localedata.jar...
jfxrt.jar...
[root@nginx jason]# java -version
java version "1.8.0_11"
Java(TM) SE Runtime Environment (build 1.8.0_11-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.11-b03, mixed mode)
[root@nginx jason]# cd /usr/local/
[root@nginx local]# mkdir tomcat
[root@nginx local]# ls
bin etc games include lib lib64 libexec sbin share src tomcat
解压apache-tomcat-9.0.4并移动到/usr/local/tomcat/
[root@nginx jason]# mv apache-tomcat-9.0.4 /usr/local/tomcat/
打开文件 /etc 目录下的 profile 文件,将如下代码追加到 profile 文件末尾:
# idea - tomcat9 config start - -- export CATALINA_HOM=/usr/local/tomcat/apache-tomcat-9.0.
export CATALINA_BASE=/usr/local/tomcat/apache-tomcat-9.0.
export TOMCAT_HOME=/usr/local/tomcat/apache-tomcat-9.0.4 # idea - tomcat9 config end - 2018-7-24
修改 tomcat 的端口号和字符编码
vim /usr/local/tomcat/apache-tomcat-9.0.4/conf/server.xml
找到如下代码:
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
将其中的 8080 改成 HTTP 协议的默认端口 80,改后的代码如下:
<Connector port="80" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" URIEncoding="UTF-8" />
增加 manager-gui 图形化管理界面的访问权限(不需要的话,此步骤可忽略):
[root@nginx tomcat]# cd apache-tomcat-9.0.4/conf/
[root@nginx conf]# ls
catalina.policy catalina.properties context.xml jaspic-providers.xml jaspic-providers.xsd logging.properties server.xml tomcat-users.xml tomcat-users.xsd web.xml
[root@nginx conf]# vim tomcat-users.xml
- 在 </tomcat-users> 标签前加入如下代码:
<role rolename="admin-gui"/> <role rolename="admin-script"/> <role rolename="manager-gui"/> <role rolename="manager-script"/> <role rolename="manager-jmx"/> <role rolename="manager-status"/> <user username="tomcat" password="mytomcatadmin" roles="manager-gui,manager-script,manager-jmx,manager-status,admin-script,admin-gui"/>
进入
[root@nginx apache-tomcat-9.0.4]# cd webapps/manager/META-INF/
[root@nginx META-INF]# vi context.xml
进入
[root@nginx]#cd /usr/local/tomcat/apache-tomcat-9.0.4/webapps/host-manager/META-INF/
[root@nginx META-INF]# vim context.xml
(或者和上面的一样注释掉)
这里设置的 username 是tomcat;password 都是 mytomcatadmin,角色为 manager-gui;
如果要某网段可以访问tomcat
在tomcat-users.xml里添上几句即可
打开webapps下的host-manager和manager,都有一个共同的文件夹META-INF,里面都有context.xml,这个文件的内容是:
<Context antiResourceLocking="false" privileged="true" >
<Valve className="org.apache.catalina.valves.RemoteAddrValve"
allow="127.d+.d+.d+|::1|0:0:0:0:0:0:0:1" />
</Context>
通过查看官方文档,知道,这段代码的作用是限制来访IP的,127.d+.d+.d+|::1|0:0:0:0:0:0:0:1,是正则表达式,表示IPv4和IPv6的本机环回地址,所以这也解释了,为什么我们本机可以访问管理界面,但是其他机器确403。
找到原因了,那么修改一下这里的正则表达式即可,比如我们只允许内网网段192.168.2访问管理页面,那么改成这样就可以:
<Context antiResourceLocking="false" privileged="true" >
<Valve className="org.apache.catalina.valves.RemoteAddrValve"
allow="192.168.2.*" />
</Context>
修改完毕,关闭浏览器,重新打开tomcat,问题解决!
进入到 /usr/local/tomcat/apache-tomcat-9.0.0.M4/bin 目录中:
cd ../bin/
打开 vi catalina.sh 文件:
在 # OS specific support. 上面一行加入如下代码(不能有空格):
JAVA_HOME=/usr/java/jdk1.8.0_11/
JRE_HOME=$JAVA_HOME/jre
查看java_home目录
[root@nginx bin]# rpm -qa|grep jdk
jdk-1.8.0_11-fcs.x86_64
[root@nginx bin]# rpm -ql jdk-1.8.0_11-fcs.x86_64
启动 tomcat 服务:
./startup.sh
打印如下信息则表明启动 Tomcat 服务成功:
[root@nginx bin]# ./startup.sh
Using CATALINA_BASE: /usr/local/tomcat/apache-tomcat-9.0.4
Using CATALINA_HOME: /usr/local/tomcat/apache-tomcat-9.0.4
Using CATALINA_TMPDIR: /usr/local/tomcat/apache-tomcat-9.0.4/temp
Using JRE_HOME: /usr/java/jdk1.8.0_11//jre
Using CLASSPATH: /usr/local/tomcat/apache-tomcat-9.0.4/bin/bootstrap.jar:/usr/local/tomcat/apache-tomcat-9.0.4/bin/tomcat-juli.jar
Tomcat started.
打开浏览器输入 IP(修改测试页面)
进入
/usr/local/tomcat/apache-tomcat-9.0.4/webapps/ROOT
修改index.jsp
简化启动服务
cd /etc/init.d/
vim tomcat
# idea - tomcat config start - -- #!/bin/bash
# description: Tomcat Start Stop Restart
# processname: tomcat
# chkconfig:
JAVA_HOME=/usr/java/jdk1..0_11/
export JAVA_HOME
PATH=$JAVA_HOME/bin:$PATH
export PATH
CATALINA_HOME=/usr/local/tomcat/apache-tomcat-9.0. case $ in
start)
sh $CATALINA_HOME/bin/startup.sh
;;
stop)
sh $CATALINA_HOME/bin/shutdown.sh
;;
restart)
sh $CATALINA_HOME/bin/shutdown.sh
sh $CATALINA_HOME/bin/startup.sh
;;
esac
exit #chmod tomcat
#chkconfig --add tomcat
#chkconfig --level tomcat on
#chkconfig --list tomcat # idea - tomcat config end - --
[root@nginx conf] chmod +x tomcat
[root@nginx conf]chkconfig --add tomcat
[root@nginx conf]chkconfig tomcat on
启动tomcat
进入/usr/local/tomcat/apache-tomcat-9.0.4/bin
[root@python bin]# ./startup.sh
[root@python bin]# ./shutdown.sh (更改配置文件之后重新加载需要停止tomcat再启用)
开机自动启动
vi /etc/rc.d/rc.local 添加
/usr/local/tomcat/apache-tomcat-9.0.4/bin/startup.sh
linux 系统中的 /etc 目录表示“设备”,意为与硬件设备相关的信息;
/etc/init.d 目录下的文件表示当前设备的初始化配置信息;
命令 chkconfig 表示添加(--add)、删除(--del)、查看(--list)
3、修改Nginx配置文件(192.168.2.224
cd /usr/local/nginx/conf
vim nginx.conf
在server配置的上面新增upstream 配置,后面的“server_tomcat”相当于该配置别名,供后面的“proxy_pass”配置使用。
upstream 里面配置的就是2个tomcat的访问地址,IP:端口号,不用写http:// 。
proxy_pass 转发定位到upstream 里面配置的多台服务器proxy_pass 配置的http:// 必须要写。(不是https)
修改完成后,重新加载nginx服务的配置
nginx -s reload
看到这,肯定会有人有疑问,如果有一台服务器突然挂掉了怎么办?别急,这种情况nginx已经给我们处理了,当有台服务器挂掉了,nginx默认不会访问挂掉的服务,继续访问其他正在运行的服务,提供了很好的容错机制。
能不能让两台服务器访问的概率不一样了?能,nginx给我们提供了 weight这个属性,可以给各个服务器分配权重,配置如下:
weight 默认为1.weight越大,负载的权重就越大。
通过上面的配置,刷新页面,会发现访问tomcat1的概率明显比访问tomcat2的概率大。
PS:upstream目前支持5种方式的分配
1、轮询(默认)
每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。
2、weight
指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。
例如:
- upstream bakend {
- server 192.168.0.14 weight=10;
- server 192.168.0.15 weight=10;
- }
3、ip_hash
每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。
例如:
- upstream bakend {
- ip_hash;
- server 192.168.0.14:88;
- server 192.168.0.15:80;
- }
4、fair(第三方)
按后端服务器的响应时间来分配请求,响应时间短的优先分配。
- upstream backend {
- server server1;
- server server2;
- fair;
- }
5、url_hash(第三方)
按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。
例:在upstream中加入hash语句,server语句中不能写入weight等其他的参数,hash_method是使用的hash算法
- upstream backend {
- server squid1:3128;
- server squid2:3128;
- hash $request_uri;
- hash_method crc32;
- }
- tips:
- upstream bakend{#定义负载均衡设备的Ip及设备状态
- ip_hash;
- server 127.0.0.1:9090 down;
- server 127.0.0.1:8080 weight=2;
- server 127.0.0.1:6060;
- server 127.0.0.1:7070 backup;
- }
在需要使用负载均衡的server中增加
proxy_pass http://bakend/;
每个设备的状态设置为:
1.down 表示单前的server暂时不参与负载
2.weight 默认为1.weight越大,负载的权重就越大。
3.max_fails :允许请求失败的次数默认为1.当超过最大次数时,返回proxy_next_upstream 模块定义的错误
4.fail_timeout:max_fails次失败后,暂停的时间。
5.backup: 其它所有的非backup机器down或者忙的时候,请求backup机器。所以这台机器压力会最轻。
nginx支持同时设置多组的负载均衡,用来给不用的server来使用。
client_body_in_file_only 设置为On 可以讲client post过来的数据记录到文件中用来做debug
client_body_temp_path 设置记录文件的目录 可以设置最多3层目录
location 对URL进行匹配。可以进行重定向或者进行新的代理 负载均衡
3、安装keepalive
yum install -y keepalived
修改config文件
vim /etc/keepalived\keepalived.conf
keepalived.conf各项的含义
MASTER
! Configuration File for keepalived #全局配置 global_defs { #keepalived切换的时候,发消息到指定的email,可配置多个email notification_email { feinik1@foxmail.com feinik2@foxmail.com } #通知邮件从哪个地址发出 notification_email_from feinik@foxmail.com #通知邮件的smtp地址 smtp_server smtp.exmail.qq.com #连接smtp服务器的超时时间,单位秒 smtp_connect_timeout 30 #Keepalived的机器标识,一个网络内保持唯一 router_id nginx-master } #执行脚本配置 vrrp_script chk_nginx { #脚本所在路径 script "/home/project/keepalived/check_nginx.sh" #脚本执行间隔时间,秒 interval 2 #优先级 weight 2 } #keepalived实例配置 vrrp_instance VI_1 { #指定实例的初始状态,MASTER或BACKUP两种状态,并且需要大写 state MASTER #实例绑定的网卡 interface ens33 #虚拟路由标识,是一个数字,整个VRRP内唯一,如果keepalived配置了主备,需要相同 virtual_router_id 51 #优先级,数值愈大,优先级越高 priority 100 #MASTER与BACKUP之间同步检查的时间间隔,单位为秒 advert_int 1 #通信验证 authentication { auth_type PASS auth_pass feinik } #追踪外围脚本 track_script { #这里配置vrrp_script的名称 chk_nginx } #虚拟ip配置,可配置多个 virtual_ipaddress { 192.168.10.200 } }
BACKUP
! Configuration File for keepalived #全局配置 global_defs { #keepalived切换的时候,发消息到指定的email,可配置多个email notification_email { feinik1@foxmail.com feinik2@foxmail.com } #通知邮件从哪个地址发出 notification_email_from feinik@foxmail.com #通知邮件的smtp地址 smtp_server smtp.exmail.qq.com #连接smtp服务器的超时时间,单位秒 smtp_connect_timeout 30 #Keepalived的机器标识,一个网络内保持唯一 router_id nginx-master } #执行脚本配置 vrrp_script chk_nginx { #脚本所在路径 script "/home/project/keepalived/check_nginx.sh" #脚本执行间隔时间,秒 interval 2 #优先级 weight 2 } #keepalived实例配置 vrrp_instance VI_1 { #指定实例的初始状态,MASTER或BACKUP两种状态,并且需要大写 state BACKUP #实例绑定的网卡 interface ens33 #虚拟路由标识,是一个数字,整个VRRP内唯一,如果keepalived配置了主备,需要相同 virtual_router_id 51 #优先级,数值愈大,优先级越高 priority 99 #MASTER与BACKUP之间同步检查的时间间隔,单位为秒 advert_int 1 #通信验证 authentication { auth_type PASS auth_pass feinik } #追踪外围脚本 track_script { #这里配置vrrp_script的名称 chk_nginx } #虚拟ip配置,可配置多个 virtual_ipaddress { 192.168.10.200 } }
我的实验配置
master
! Configuration File for keepalived global_defs {
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 192.168.200.1
smtp_connect_timeout 30
router_id LVS_DEVEL
vrrp_skip_check_adv_addr
vrrp_garp_interval 0
vrrp_gna_interval 0 } vrrp_script chk_nginx {
script "/etc/keepalived/nginx_check.sh"
interval 3
weight 2
}
vrrp_instance VI_1 {
state MASTER
interface enp0s17
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PAS
auth_pass 1111
}
track_script {
chk_nginx
}
virtual_ipaddress {
192.168.2.226
} }
backup
! Configuration File for keepalived global_defs {
...
} rrp_script chk_nginx {
script "/etc/keepalived/nginx_check.sh"
interval 3
weight 2
} vrrp_instance VI_1 {
state BACKUP
interface enp0s17
virtual_router_id 51
priority 90
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
track_script {
chk_nginx
}
virtual_ipaddress {
192.168.2.226
}
}
查看VIP(ip addr)
nginx_check.sh脚本(赋予只读权限 chmod +x nginx_check.sh)
如果 nginx 停止运行,尝试启动,如果无法启动则杀死本机的 keepalived 进程,keepalived将虚拟 ip 绑定到 BACKUP 机器上。内容如下:
#!/bin/bash
A=`ps -C nginx –no-header |wc -l`
if [ $A -eq 0 ];then
/home/wangzi/soft/nginx/sbin/nginx
sleep 5
if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
killall keepalived
fi
fi
测试
centos7 搭建keepalived+Nginx+tomcat的更多相关文章
- 搭建 Keepalived + Nginx + Tomcat 的高可用负载均衡架构
1 概述 初期的互联网企业由于业务量较小,所以一般单机部署,实现单点访问即可满足业务的需求,这也是最简单的部署方式,但是随着业务的不断扩大,系统的访问量逐渐的上升,单机部署的模式已无法承载现有的业务量 ...
- [转]搭建Keepalived+Nginx+Tomcat高可用负载均衡架构
[原文]https://www.toutiao.com/i6591714650205716996/ 一.概述 初期的互联网企业由于业务量较小,所以一般单机部署,实现单点访问即可满足业务的需求,这也是最 ...
- 搭建Keepalived + Nginx + Tomcat的高可用负载均衡架构
1 概述 初期的互联网企业由于业务量较小,所以一般单机部署,实现单点访问即可满足业务的需求,这也是最简单的部署方式,但是随着业务的不断扩大,系统的访问量逐渐的上升,单机部署的模式已无法承载现有的业务量 ...
- Keepalived + Nginx + Tomcat 的高可用负载均衡架构搭建
Keepalived + Nginx + Tomcat 的高可用负载均衡架构搭建 Nginx 是一个高性能的 HTTP反向代理服务器 Keepalived 是一个基于VRRP协议来实现的LVS服务高可 ...
- Keepalived + Nginx + Tomcat 高可用负载均衡架构
环境: 1.centos7.3 2.虚拟ip:192.168.217.200 3.192.168.217.11.192.168.217.12上分别部署Nginx Keepalived Tomcat并进 ...
- Ubuntu下配置 keepalived+nginx+tomcat 负载均衡
本文力图阐述在 Ubuntu Server 环境下使用 Keepalived + Nginx + Tomcat 搭建高可用负载均衡环境的操作步骤和简约配置,这里不涉及性能调优.先说一下他们各自扮演的角 ...
- Keepalived+Nginx+tomcat实现系统的高可用
Keepalived+Nginx+tomcat实现系统的高可用 1:安装vmware虚拟机 2:安装linux系统,我自己下载的centos6.5 3:安装JDK,tomcat 解压tomcat到/u ...
- Keepalived+Nginx+Tomcat 实现高可用Web集群
https://www.jianshu.com/p/bc34f9101c5e Keepalived+Nginx+Tomcat 实现高可用Web集群 0.3912018.01.08 20:28:59字数 ...
- Keepalived+Nginx+Tomcat配置高可用负载均衡系统示例
前言 此示例为keepalived+nginx+tomcat的基础配置示例,某些特定配置此例中不会出现,在示例中会用到三个虚拟机:两个纯命令行用于模拟服务端配置,一个带桌面环境的用于模拟客户端访问,这 ...
随机推荐
- for循环、in、not in
for循环可以遍历集合中任意一个元素 1 a = ["hello", "world", "dlrb"] 2 for b in a: 3 pr ...
- OpenCV:直线拟合——cv::fitLine()详解
实现目的:有一系列的点,需要拟合出一条直线. cv::fitLine()的具体调用形式如下: void cv::fitLine( cv::InputArray points, // 二维点的数组或ve ...
- cookie、localStorage、sessionStorage和会话控制机制
简介 cookie cookie的内容主要包括:名字Name.值Value.域Domain.路径Path.过期时间Expires/Max-Age.大小Size.HTTP.Secure.SameSite ...
- <记录> Ubuntu16.04 安装Redis以及phpredis扩展
Linux下安装Redis 1.获取redis资源 wget http://download.redis.io/releases/redis-4.0.8.tar.gz 2.解压 tar xzvf re ...
- QT,QT SDK, QT Creator 区别
Qt是一个跨平台的C++图形用户界面应用程序框架.(不仅仅是C++,还包括QML,Qquick,html5)它提供给应用程序开发者建立艺术级的图形用户界面所需的所用功能.Qt是完全面向对象的,很容易扩 ...
- git的团队协作开发
title: git的团队协作开发 date: 2018-04-24 14:00:03 tags: [git] --- 项目负责人创建组织架构 在控制面板中点击组织按钮,添加组织,在这里可以把组织理解 ...
- 10款流行的Markdown编辑器,总有一款适合你
摘要:作为一个开源人,如果你不会使用Markdown语法,那你就OUT了!Markdown 是 2004 年由 John Gruberis 设计和开发的纯文本格式的语法,非常的简单实用. 作为一个开源 ...
- php7内核执行流程(转载留记录)
- tp5中ajax方式提交表单
用ajax提交表单,迅速,快捷,实现页面无刷新提交表单. <!DOCTYPE html> <html lang="en"> <head> < ...
- Django - session 会话跟踪技术
1.session简介 |session 英 /'seʃ(ə)n/ 美 /'sɛʃən/ 基于cookies开发,将值存到服务端 写session 读session Session是服务器端技术,利用 ...