Centos7开机/etc/rc.local不执行的问题

centos7 的/etc/rc.local不会开机执行,查看/etc/rc.local文件内容的就发现了问题的原因了

#!/bin/bash
# THIS FILE IS ADDED FOR COMPATIBILITY PURPOSES
#
# It is highly advisable to create own systemd services or udev rules
# to run scripts during boot instead of using this file.
#
# In constrast to previous versions due to parallel execution during boot
# this script will NOT be run after all other services.
#
# Please note that you must run 'chmod +x /etc/rc.d/rc.local' to ensure
# that this script will be executed during boot.

翻译:

#这个文件是为了兼容性的问题而添加的。
#
#强烈建议创建自己的systemd服务或udev规则来在开机时运行脚本而不是使用这个文件。
#
#与以前的版本引导时的并行执行相比较,这个脚本将不会在其他所有的服务后执行。
#
#请记住,你必须执行“chmod +x /etc/rc.d/rc.local”来确保确保这个脚本在引导时执行。

查看/etc/rc.local的权限

[root@localhost ~]# ll /etc/rc.local
lrwxrwxrwx. 1 root root 13 8月  12 06:09 /etc/rc.local -> rc.d/rc.local
[root@localhost ~]# ll /etc/rc.d/rc.local
-rw-r--r--. 1 root root 477 6月  10 13:35 /etc/rc.d/rc.local

/etc/rc.d/rc.local没有执行权限,于是按说明的内容执行

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

重启后/etc/rc.local能够执行了。

OS X Yosemite 10.10 系统PHP环境

PHP 5.6 (Current stable)

curl -s http://php-osx.liip.ch/install.sh | bash -s 5.6

PHP 5.5 (Old stable)

curl -s http://php-osx.liip.ch/install.sh | bash -s 5.5

PHP 5.4 (Older stable)

curl -s http://php-osx.liip.ch/install.sh | bash -s 5.4

PHP 5.3 (End of life)

curl -s http://php-osx.liip.ch/install.sh | bash -s 5.3

http://php-osx.liip.ch/

什么是软件著作权?

一、软件著作权的立法
1、早在1990年9月颁布的《中华人民共和国著作权法》中,计算机软件就被列为著作权保护的作品。1991年6月4日由国务院颁布《计算机软件保护条例》,对计算机软件给予专门的保护。该条例于1991年10月1日实施。为了适应我国加入世界贸易组织新的形势,全国人大常委会于2001年9月27日对著作权法进行了修订伴随著作权法的修订,国务院于2001年12月20日也对《计算机软件保护条例》做了修订,并于2002年1月1日施行。
2、计算机软件条例对软件著作权的保护,在立法宗旨和保护原则上与著作权法对其他文学艺术作品的保护是基本相同的。但是,软件在表现形式、开发和应用等诸多方面与传统作品相比又有着显著的特点。例如,软件中程序本身不可直观,程序作为产品带有明显的功能性和应用性,并且极易被修改、复制和传播等。因此通过单独立法对软件著作权进行专门保护就显得十分必要。
二、著作权保护的软件
1、著作权保护的软件包括两部分,即计算机程序和文档。
2、计算机程序是指为了得到某种结果而可以由计算机等具有信息处理能力的装置执行的代码化指令序列或者可以被自动转换成代码化指令序列的符号化指令序列或者符号化语句序列。程序包括使用程序语言编写的源程序和使用机器语言编写的目标程序。同一计算机程序的源程序和目标程序为同一作品。文档是指用来描述程序的内容、组成、设计、功能规格、开发情况、测试结果及使用方法的文字资料和图表等,如程序设计说明书、流程图、用户手册等。
3、软件必须由开发者独立开发,并固定在某种有形物体上。
4、软件著作权自软件开发完成之日起产生,并且不论是否发表都享有著作权。
5、软件著作权保护不延及开发软件所用的思想、处理过程、操作方法或者数学概念。
三、软件著作权的权利内容
1、发表权,即决定软件是否公之于众的权利。软件的发表一般意味着软件本身开始脱离著作权人的直接控制,在多数情况下是著作权人行使权利的开始。
2、署名权,即表明开发者身份,在软件上署名的权利。在没有相反证明的情况下,将在软件上署名的自然人、法人或者其他组织推定为开发者。
3、修改权,即对软件进行增补、删节,或者改变指令、语句顺序的权利。修改软件实际上是开发的延续
4、复制权,即将软件制作一份或者多份的权利。利用某种介质将软件复制,仍然是目前使用软件较为普遍的形式。
5、发行权,即以出售或者赠与方式向公众提供软件的原件或者复制件的权利。
6、出租权,即有偿许可他人临时使用软件的权利,但是软件不是出租的主要标的的除外。
7、信息网络传输权,即以有线或者无线方式向公众提供软件,使公众可以在其个人选定的时间和地点获得软件的权利。如在互联网上传输软件供他人下载使用。
8、翻译权,即将原软件从一种自然语言文字转换成另一种自然语言文字的权利。
9、应当由软件著作权人享有的其他权利。
10、许可权。软件著作权人可以许可他人行使其软件著作权,并有权获得报酬。
11、转让权。软件著作权人可以全部或者部分转让其软件著作权,并有权获得报酬。
四、软件著作权的归属
在通常情况下,软件著作权一般属于软件开发者享有。软件开发者是指实际组织开发、直接进行开发,并对开发完成的软件承担责任的法人或者其他组织;或者依靠自己具有的条件独立完成软件开发,对软件承担责任的自然人。
但是,软件条例还规定几种特殊情况的著作权归属:
1、 合作开发软件。合作开发软件是指由两个以上的自然人、法人或者其他组织合作开发的软件。合作开发的软件著作权归属由合作开发者签定书面合同约定。未签定合同或者合同未明确约定的,合作开发的软件可以分割使用的,开发者对各自开发的部分可以单独享有著作权。合作开发的软件不能分割使用的,由各合作开发者共同享有,通过协商一致行使。
2、 委托开发软件。委托开发软件是指接受他人委托开发的软件。委托开发软件的著作权归属由委托人与受托人签定书面合同约定;无书面合同或者合同未作明确约定的,著作权归受托人享有。
3、 国家机关下达任务开发软件。由国家机关下达任务开发的软件,著作权的归属与行使由项目任务书或者合同规定;项目任务书或者合同未作明确规定的,软件著作权由接受任务的法人或者其他组织享有。
4、 职务开发软件。自然人在法人或者其他组织中任职期间所开发的软件有下列情形之一的,该软件著作权由该法人或者其他组织享有,该法人或者其他组织可以对开发软件的自然人进行奖励:1、针对本职工作中明确指定的开发目标所开发的软件;2、开发的软件是从事本职工作活动所预见的结果或者自然的结果;3、主要使用了法人或者其他组织的资金、专用设备、未公开的专门信息等物质技术条件所开发并有法人或者其他组织承担责任的软件。此外,通过受让、继承或者承受取得软件著作权的自然人、法人或者其他组织也可以成为软件著作权人。
五、软件著作权的保护期
1、自然人软件著作权的保护期:
自然人的软件著作权,保护期为自然人终生及其死亡后50年,截止于自然人死亡后第50年的12月31日;软件是合作开发的,截止于最后死亡的自然人死亡后的第50年的12月31日。
2、法人或者其他组织软件著作权的保护期:
法人或者其他组织的软件著作权,保护期为50年,截止于软件首次发表后第50年的12月31日,但软件自开发完成之日起50年内未发表的,不再受保护。
六、软件著作权的继承和承受
软件著作权在保护期内,可以被继承或者承受。
1、 继承。软件著作权属于自然人的,该自然人死亡后,在软件著作权的保护期内,软件著作权的继承人可以依照《中华人民共和国继承法》的有关部门规定,继承著作权中除署名权以外的其他权利。
2、 承受。软件著作权属于法人或者其他组织的,法人或者其他组织变更、终止后,其著作权在保护期内由承受其权利义务的法人或者其他组织享有;没有承受其权利义务的法人或者其他组织的,由国家享有。
七、软件著作权的使用许可和转让
1、 使用许可。软件著作权人可以自己使用软件,也可以通过授权许可他人使用软件。著作权人许可使用软件应当与被许可人订立许可使用合同。特别是许可他人专有行使软件著作权时,还应当订立书面合同。使用许可合同应当包括以下主要条款:使用许可软件的方式;许可使用的权利是专有使用权或者非专有使用权;许可使用的范围、期间;付酬的标准和办法;违约责任;双方认为需要约定的其他内容等。许可使用合同中软件著作权人未明确许可的权利,被许可人不得行使。没有订立合同或者合同中未明确约定专有许可的,应视为非专有许可。
在许可使用软件中,软件的著作权人未发生改变,仍为许可人。被许可人只是在一定的期限内取得使用软件的权利,而无权再将软件著作权转让他人。
2、 转让。除了许可使用,软件著作权人也可以将软件著作权转让他人。软件著作权人可以转让全部全部权利,也可以转让部分权利,但署名权不得转让。软件著作权转让后,受让人成为新的著作权人,可以将著作权再次转让转让一般是没有期限的。但在实践中,有些软件的转让规定了期限。在转让期满后,软件著作权应当回归原著作权人。转让软件著作权应当订立书面合同。
八、对软件的合理使用   软件的合法复制品所有人可以行使以下权利:
1、 根据使用的需要把该软件装入计算机等具有信息处理能力的装置内;
2、 为了防止复制品损坏而制作备份复制品。这些备份复制品不得通过任何方式提供给他人使用,并在所有人丧失该合法复制品的所有权时,负责备份复制品销毁;
3、为了把该软件用于实际的计算机应用环境或者改进其功能、性能而进行必要的修改;但是除合同另有约定外,未经软件著作权人许可,不得向任何第三方提供修改后的软件。
4、为了学习和研究软件内含的设计思想和原理,通过安装、显示、传输或者存储软件等方式使用软件的可以不经软件著作权人许可,不向其支付报酬。
九、侵犯软件著作权的法律责任
1、 民事责任
软件著作权是一种民事权利,侵犯软件著作权应当承担民事责任。
2、 承担民事责任的侵权行为:
(1)未经软件著作权人许可,发表或者登记其软件的;
(2)将他人软件作为自己的软件发表或者登记的;
(3)未经合作者许可,将与他人合作开发的软件作为自己单独完成的软件发表或者登记的;
(4)在他人软件上署名或者更改他人软件的署名的;
(5)未经软件著作权人许可,修改、翻译其软件的;
(6)其他侵犯软件著作权的行为。
3、承担民事的方式:
承担民事责任的方式包括停止侵权、消除影响、赔礼道歉、赔偿损失等。
其中赔偿损失是承担民事责任的主要方式。侵权人应当按照权利的实际损失给予赔偿;实际损失难以计算的,可以按照侵权人的违法所得给予赔偿。赔偿数额还应当包括权利人为制止侵权行为所支付的合理开支。如果权利人的实际损失或者侵权人的违法所得不能确定,法院可以根据侵权行为的情节,判决给予50万以下的赔偿。
4、 诉讼前的保全措施:
追究民事责任,除了软件著作权人和侵权人自行协商解决或者通过第三方调解解决外,主要通过诉讼的方式解决。为了保障软件著作权人有效地追究侵权人的民事责任,有以下几种诉讼前的保全措施:
(1)行为和财产保全。软件著作权人有证据证明他人正在实施或者即将实施侵犯其权利的行为,如不及时制止,将会使其合法权益受到难以弥补的损害,权利人可以在提起诉讼前,向法院申请采取责令停止有关部门行为和财产保全的措施
(2)证据保全。为了制止侵权行为,在证据可能灭失或者以后难以取得的情况下,软件著作权人可以在诉讼前向法院申请保全证据。根据有关司法解释,著作权纠纷案件一般由各中级人民法院受理。
5、行政处罚。对于一些损害公共利益的侵权行为,著作权行政管理部门可以给予行政处罚。
给予行政处罚的侵权行为:
(1)复制或者部分复制著作权人的软件;
(2)向公众发行、出租、通过信息网络传播著作权人的软件;
(3)故意避开或者破坏著作权人为保护其软件著作权而采取的技术措施;
(4)故意删除或者改变软件权利管理电子信息;
(5)转让或许可他人行使著作权人的软件著作权。
6、 行政处罚的方式:
行政处罚的方式主要包括责令停止侵权行为,没收非法所得,没收、销毁侵权复制品,罚款,没收用于制
作侵权复制品的材料、工具、设备等。
对于已给予行政处罚的侵权行为,权利人还可以追究侵权人的民事责任。
目前,除国家版权局外,各省、自治区和直辖市都设立了版权局,部分地市也设立了版权局。国家版权局负责处理重大侵权案件,各地方版权局负责处理其他侵权案件
7、刑事责任。根据刑法的有关规定,未经著作权人许可,以营利为目的,复制发行计算机软件,违法所得数额较大或者有其他严重情节的,处三年以下有期徒刑或者拘役,并处或者单处罚金。违法所得数额巨大或者有其他特别严重情节的,处三年以上七年以下有期徒刑或者拘役,并处或者单处罚金。
8、仲裁。因为履行软件著作权合同发生的纠纷,如果当事人在合同中规定了仲裁条款,或者事后达成了书面仲裁协议,可以向仲裁机构申请仲裁。仲裁机构的仲裁决定是终局的,不得再向法院起诉。当事人没有在合同中订立仲裁条款,事后又没有书面仲裁协议,可以直接向人民法院提起诉讼。
十、软件著作权登记
软件著作权人可以向国务院著作权行政管理部门认定的软件登记机构办理登记。软件登记机构发放的登记证明文件是登记事项的初步证据。目前,国家版权局已经认定中国版权保护中心为软件著作权登记机构。中国版权保护中心办理软件著作权、软件著作权专有许可合同、软件著作权转让合同以及软件著作权质押合同的登记。为方便软件著作权人登记,中国版权保护中心将在各地设立办事机构,受理软件著作权登记。
十一、使用外国软件著作权合同登记
根据国家版权局有关规定,使用外国软件,应当与软件著作权人签定使用合同,并将合同报各省、自治区和直辖市版权登记。软件使用合同经认证后,由各地版权局发给批复。在向外支付使用报酬时,外汇管理部门凭版权局的批复,为当事人办理有关售付外汇的手续。
十二、软件著作权保护是鼓励软件产业发展的重要政策
1、为了加快我国软件产业和集成电路产业的发展,国家制定了鼓励政策。对软件著作权的保护成为政策中的重要内容。政策要求规范和加强软件著作权登记制度,鼓励软件著作权登记,依据国家法律对已经登记的软件予以重点保护;为了保护中外著作权人的合法权益,任何单位在其计算机系统内不得使用未经授权许可的软件产品;加大打击走私和盗版软件的力度。
2、近年来的实践表明,鼓励软件发展的政策为我国软件产业的腾飞起到了显著的作用。

CentOS 7.1中安装Nginx 1.9.4 和PHP 5.4.16

CentOS 7.1 安装PHP 5.4.16
yum -y install php-fpm php-cli php-mysql php-gd php-ldap php-odbc php-pdo php-pecl-memcache php-pear php-mbstring php-xml php-xmlrpc php-mbstring php-snmp php-soap

CentOS 7.1 安装Nginx 1.9.3
yum -y install gcc-c++  pcre pcre-devel   zlib zlib-devel  openssl openssl–devel wget
wget http://nginx.org/download/nginx-1.9.4.tar.gz
tar -zxvf nginx-1.9.4.tar.gz
cd nginx-1.9.4
./configure –prefix=/usr/local/nginx
make && make install
/usr/local/nginx/sbin/nginx

 —————————————————————————————–

yum install -y curl wget tar bzip2 unzip vim-enhanced passwd sudo yum-utils hostname net-tools rsync man  gcc gcc-c++ git make automake cmake patch logrotate python-devel libpng-devel libjpeg-devel

yum clean all

yum -y install nginx php-cli php-mysql php-pear php-ldap php-mbstring php-soap php-dom php-gd php-xmlrpc php-fpm php-mcrypt

yum clean all

CentOS 6.x 升级linux内核至 3.x

[root@localhost ~]# cat /etc/redhat-release
CentOS release 6.3 (Final)

[root@localhost ~]# uname -a
Linux localhost 2.6.32-279.el6.x86_64 #1 SMP Fri Jun 22 12:19:21 UTC 2012 x86_64 x86_64 x86_64 GNU/Linux

更新当前系统
yum update
yum upgrade

[root@localhost ~]# uname -a
Linux localhost.localdomain 2.6.32-504.23.4.el6.x86_64 #1 SMP Tue Jun 9 20:57:37 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux

安装编译内核所需要的软件包
yum groupinstall “Development Tools”   # 一口气安装编译时所需的一切工具
yum -y install wget gcc gcc-c++ xz bc ncurses-devel  hmaccalc zlib-devel binutils-devel elfutils-libelf-devel

yum install qt-devel #如果你没有 X 环境,这一条可以不用

Linux内核版本有两种:稳定版和开发版 ,Linux内核版本号由3个数字组成:r.x.y

r: 主版本号
x: 次版本号,偶数表示稳定版本;奇数表示开发中版本。
y: 修订版本号 , 表示修改的次数

http://www.kernel.org 可以看到有stable, longterm等版本,longterm是比stable更稳定的版本,会长时间更新,当前3x最新版本为3.18.18

下载解压
wget https://www.kernel.org/pub/linux/kernel/v3.x/linux-3.18.18.tar.xz
yum -y install xz
tar -xvJf linux-3.18.18.tar.xz

将当前系统的配置文件拷贝到当前目录
cd linux-3.18.18
cp /boot/config-2.6.32-504.23.4.el6.x86_64 .config

使用旧内核配置,并自动接受每个新增选项的默认设置
sh -c ‘yes “” | make oldconfig’

make oldconfig会读取当前目录下的.config文件,在.config文件里没有找到的选项则提示用户填写,然后备份.config文件为.config.old,并生成新的.config文件,参考 http://stackoverflow.com/questions/4178526/what-does-make-oldconfig-do-exactly-linux-kernel-makefile

编译内核 (需要几十分钟)
[root@centos ~]# make

安装内核

[root@centos ~]# make modules_install install

如果出现了 ERROR: modinfo: could not find module xxx,数量少的话,可以忽略。

修改Grub引导顺序

安装完成后,需要修改Grub引导顺序,让新安装的内核作为默认内核。
vi /etc/grub.conf

数一下刚刚新安装的内核在哪个位置,从0开始,然后设置default为那个数字,一般新安装的内核在第一个位置,所以设置default=0

重启
reboot

重启后,看一下当前内核版本号,

[root@localhost ~]# uname -a
Linux localhost.localdomain 3.18.18 #1 SMP Wed Jul 15 12:49:31 CST 2015 x86_64 x86_64 x86_64 GNU/Linux

成功啦

PHP中取当前url

$uri = (isset($_SERVER[‘HTTPS’]) && strtolower($_SERVER[‘HTTPS’]) !== ‘off’ ? ‘https’ : ‘http’) . ‘://’ . $_SERVER[‘HTTP_HOST’] . $_SERVER[‘REQUEST_URI’];

MySQL 使用SELECT FOR UPDATE 做事务写入前的确认

MySQL  使用SELECT … FOR UPDATE 做事务写入前的确认

以MySQL 的InnoDB 为例,预设的Tansaction isolation level 为REPEATABLE READ,在SELECT 的读取锁定主要分为两种方式:

SELECT … LOCK IN SHARE MODE SELECT … FOR UPDATE

这两种方式在事务(Transaction) 进行当中SELECT 到同一个数据表时,都必须等待其它事务数据被提交(Commit)后才会执行。而主要的不同在于LOCK IN SHARE MODE 在有一方事务要Update 同一个表单时很容易造成死锁 。

简单的说,如果SELECT 后面若要UPDATE 同一个表单,最好使用SELECT … UPDATE。

举个例子: 假设商品表单products 内有一个存放商品数量的quantity ,在订单成立之前必须先确定quantity 商品数量是否足够(quantity>0) ,然后才把数量更新为1。

不安全的做法:

SELECT quantity FROM products WHERE id=3; UPDATE products SET quantity = 1 WHERE id=3;

为什么不安全呢?

少量的状况下或许不会有问题,但是大量的数据存取「铁定」会出问题。

如果我们需要在quantity>0 的情况下才能扣库存,假设程序在第一行SELECT 读到的quantity 是2 ,看起来数字没有错,但是当MySQL 正准备要UPDATE 的时候,可能已经有人把库存扣成0 了,但是程序却浑然不知,将错就错的UPDATE 下去了。

因此必须透过的事务机制来确保读取及提交的数据都是正确的。

于是我们在MySQL 就可以这样测试: (注1)

SET AUTOCOMMIT=0; BEGIN WORK; SELECT quantity FROM products WHERE id=3 FOR UPDATE;

===========================================

此时products 数据中id=3 的数据被锁住(注3),其它事务必须等待此次事务 提交后才能执行

SELECT * FROM products WHERE id=3 FOR UPDATE (注2) 如此可以确保quantity 在别的事务读到的数字是正确的。

===========================================

UPDATE products SET quantity = ‘1’ WHERE id=3 ; COMMIT WORK;

===========================================

提交(Commit)写入数据库,products 解锁。

注1: BEGIN/COMMIT 为事务的起始及结束点,可使用二个以上的MySQL Command 视窗来交互观察锁定的状况。

注2: 在事务进行当中,只有SELECT … FOR UPDATE 或LOCK IN SHARE MODE 同一笔数据时会等待其它事务结束后才执行,一般SELECT … 则不受此影响。

注3: 由于InnoDB 预设为Row-level Lock,数据列的锁定可参考这篇。

注4: InnoDB 表单尽量不要使用LOCK TABLES 指令,若情非得已要使用,请先看官方对于InnoDB 使用LOCK TABLES 的说明,以免造成系统经常发生死锁。
MySQL SELECT … FOR UPDATE 的Row Lock 与Table Lock

上面介绍过SELECT … FOR UPDATE 的用法,不过锁定(Lock)的数据是判别就得要注意一下了。由于InnoDB 预设是Row-Level Lock,所以只有「明确」的指定主键,MySQL 才会执行Row lock (只锁住被选取的数据) ,否则MySQL 将会执行Table Lock (将整个数据表单给锁住)。

举个例子:

假设有个表单products ,里面有id 跟name 二个栏位,id 是主键。

例1: (明确指定主键,并且有此数据,row lock)

SELECT * FROM products WHERE id=’3′ FOR UPDATE;

例2: (明确指定主键,若查无此数据,无lock)

SELECT * FROM products WHERE id=’-1′ FOR UPDATE;

例2: (无主键,table lock)

SELECT * FROM products WHERE name=’Mouse’ FOR UPDATE;

例3: (主键不明确,table lock)

SELECT * FROM products WHERE id<>’3′ FOR UPDATE;

例4: (主键不明确,table lock)

SELECT * FROM products WHERE id LIKE ‘3’ FOR UPDATE;

注1: FOR UPDATE 仅适用于InnoDB,且必须在事务区块(BEGIN/COMMIT)中才能生效。

注2: 要测试锁定的状况,可以利用MySQL 的Command Mode ,开二个视窗来做测试。

什么时候需要使用for update?就是那些需要业务层面数据独占时,可以考虑使用for update。场景上,比如火车票订票,在屏幕上显示邮票,而真正进行出票时,需要重新确定一下这个数据没有被其他客户端修改。所以,在这个确认过程中,可以使用for update。这是统一的解决方案方案问题,需要前期有所准备

==============================

由于InnoDB预设是Row-Level Lock(行级锁),所以只有「明确」的指定主键,MySQL才会执行Row lock (只锁住被选取的资料例) ,否则MySQL将会执行Table Lock (表锁)。

1.当明确指定主键,并且有此资料时,锁的是where后面的记录,即这里的id= ? 这一条记录
2.明确指定主键,若查无此笔资料,无lock
3.无主键,table lock  ( SELECT * FROM user WHERE name =’ethan’ FOR UPDATE)
4.主键不明确,table lock (SELECT * FROM user WHERE id<>’5′ FOR UPDATE)

FOR UPDATE仅适用于InnoDB,且必须在事务区块(BEGIN/COMMIT)中才能生效。

==========================================

SELECT … LOCK IN SHARE MODE sets a shared mode lock on the rows read. A shared mode lock enables other sessions to read the rows but not to modify them. The rows read are the latest available, so if they belong to another transaction that has not yet committed, the read blocks until that transaction ends.
在读取的行上设置一个共享模式的锁。这个共享锁允许其它session读取数据但不允许修改它。 行读取的是最新的数据,如果他被其它事务使用中而没有提交,读取锁将被阻塞直到那个事务结束。

SELECT … FOR UPDATE sets an exclusive lock on the rows read. An exclusive lock prevents other sessions from accessing the rows for reading or writing.
在读取行上设置一个排他锁。阻止其他session读取或者写入行数据

如何进行wordpress的手动更新

1.备份旧版wordpress资料,包括数据库和服务器内的文件。

2.从WP中文官网下载最新版WordPress,下载完毕解压到你电脑上。

3.删除博客主机上的wp-includes和wp-admin目录。

4.将解压在本地电脑的wordpress文件夹中除了wp-content目录外的所有文件都上传并覆盖到你博客主机相对应的位置。

5.执行升级步骤,运行http://你的博客地址/wp-admin/upgrade.php,将你的博客地址填入路径中执行升级程序。

使用nginx proxy_pass 配合SSH隧道实现内网80端口映射

 

微信公众号对接服务器必须为80端口,给开发时本机实时调试造成很多麻烦。

如何进行微信公众平台开发测试?下面介绍几种常见方法

1.远程调试
将代码发布到服务器上进行测试,可以使用git或svn在提交代码后,自动部署到开发测试服务器上。效率低。

2.在本地路由器上做端口映射,直接将80端口映射到开发电脑中。如果有条件的,这种方式比较方便,但网络提供商一般屏蔽80端口,如果是ADSL,ip地址不固定,给实际操作,带来很多不确定因素。

3.使用神器ngrok,将本机80直接映射到公网,可惜服务器在国外,网络也比较慢还经常被墙。

4.使用nat123进行80网站映射,未找到mac版客户端,未做测试。

5.使用nginx proxy_pass 配合SSH隧道,完美!

nginx配置

server {
listen       80;
server_name 你的域名;

location / {
proxy_pass http://localhost:8080;

proxy_redirect off;

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_set_header Cookie $http_cookie;

}
}

开发电脑中,执行一条命令即可

ssh -CNg -R 8080:127.0.0.1:80 -o TCPKeepAlive=yes -o ServerAliveInterval=10 -o ServerAliveCountMax=2 -o ExitOnForwardFailure=yes 用户名@服务器ip

 如果断开后连不上,提示端口已占用,在服务器上运行 
#lsof -i:8080  #查看端口被哪个进程占用8080端口,然后kill -9