修改php.ini,将原来的文件(files)模式改成reids,如下:
session.save_handler = redis session.save_path = "tcp://127.0.0.1:6379"
修改php.ini,将原来的文件(files)模式改成reids,如下:
session.save_handler = redis session.save_path = "tcp://127.0.0.1:6379"
* 内网测试
本机: 127.0.0.1
VM1: 192.168.1.119:80
VM2: 192.168.1.120:80
* 代理机(127.0.0.1本机)配置
在hosts文件中添加一行 127.0.0.1 www.a.com
在http模块中添加如下代码,或者在vhosts添加引入配置文件如www.a.com
upstream www.a.com{ server 192.168.1.119:80 weight=5; server 192.168.1.120:80 weight=5; } server { listen 80; server_name www.a.com; charset utf-8; location / { proxy_pass http://www.a.com; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } }
* 负载机配置
VM1: 192.168.1.119
VM2: 192.168.1.120
server{ listen 80; server_name www.a.com; index index.php index.html; root /var/www/html; }
配置完重启NGINX,访问www.a.com测试,weight为负载权重,刷新页面会访问不同的主机,配置成功!
注意事项
1、主从服务器操作系统版本和位数一致。
2、MySQL版本一致。
服务器配置
master:192.168.1.120
slave:192.168.1.119
Master(192.168.1.120)服务器配置
vim /etc/my.cnf
[mysqld] # 唯一的服务辨识号,数值位于 1 到 2^32-1之间. # 此值在master和slave上都需要设置. # 如果 “master-host” 没有被设置,则默认为1, 但是如果忽略此选项,MySQL不会作为master生效. server-id=1 # 打开二进制日志功能. # 在复制(replication)配置中,作为 MASTER 主服务器必须打开此项 # 如果你需要从你最后的备份中做基于时间点的恢复,你也同样需要二进制日志. log-bin=master-bin log-bin-index=master-bin.index #需要备份的数据库 binlog-do-db=orders #不需要备份的数据库 #若没有配置binlog-do-db和binlog_ignore_db,表示备份全部数据库。 binlog-ignore-db=mysql
2、重启mysqld服务
service mysqld restart
3、为从MySQL创建用户
#登录 mysql -uroot -p Enter password: #创建用户 mysql> create user 'slave'@'192.168.1.119(从机ip)' identified by '1'; #配置主从复制权限 mysql> grant replication slave on *.* to 'slave'@'192.168.1.119(从机ip)' identified by '1';
4、若orders中已有数据,还需要锁定主服务器数据库,然后将数据导入到从数据库
#锁定 mysql> flush tables with read lock; #数据复制到从数据库后,查看主数据库master状态并解锁: mysql> show master status; +-------------------+----------+--------------+------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +-------------------+----------+--------------+------------------+ | master-bin.000004 | 648 | orders | mysql | +-------------------+----------+--------------+------------------+ 1 row in set (0.00 sec) mysql> unlock tables;
Slave(192.168.1.119)服务器配置
1、配置服务ID
vim /etc/my.cnf [mysqld] #server_id是必须的,而且唯一 server-id=2 # 使得slave只读.只有用户拥有SUPER权限和在上面的slave线程能够修改数据. # 你可以使用此项去保证没有应用程序会意外的修改slave而不是master上的数据 #read_only # 如果你在使用链式从服务器结构的复制模式 (A->B->C), # 需要打开slave的二进制日志 #log_bin=mysql-bin # 如果你在使用链式从服务器结构的复制模式 (A->B->C), # 你需要在服务器B上打开此项. # 此选项打开在从线程上重做过的更新的日志, 并将其写入从服务器的二进制日志. # 如果打开log_bin,却没有设置log_slave_updates,这是一种错误的配置。 #log_slave_updates
2、重启MySQL服务
3、复制配置
#登录 mysql -uroot -p Enter password: #执行 mysql> change master to master_host='192.168.1.120', master_user='slave', master_password='1', master_port=3306, master_log_file='master-bin.000004', master_log_pos=648, master_connect_retry=10;
参数详解:
master_host:主服务器的IP。
master_user:配置主服务器时建立的用户名
master_password:用户密码
master_port:主服务器mysql端口,如果未曾修改,默认即可。
master_log_file:日志文件名称,填写查看master状态时显示的File
master_log_pos:日志位置,填写查看master状态时显示的Position
master_connect_retry:重连次数
4、启动进程
mysql> show slave status\G *************************** 1. row *************************** Slave_IO_State: Waiting for master to send event Master_Host: 192.168.1.120 Master_User: slave Master_Port: 3306 Connect_Retry: 10 Master_Log_File: master-bin.000004 Read_Master_Log_Pos: 648 Relay_Log_File: magic-VirtualBox-relay-bin.000003 Relay_Log_Pos: 507 Relay_Master_Log_File: master-bin.000004 Slave_IO_Running: Yes Slave_SQL_Running: Yes
若Slave_IO_Running和Slave_SQL_Running均为Yes,则表示配置成功。
5、中间遇到了一些问题,解决如下
Slave_IO_Running: No Slave_SQL_Running: No Last_Errno: 1146 Last_Error: Error 'Table 'orders.user_orders' doesn't exist' on query. Default database: 'orders'. Query: 'INSERT INTO `orders`.`user_orders` (`id`, `user_id`, `user_name`) VALUES (NULL, '2', 'magic.shen')' # 首先停止主从同步, # stop slave; # 检查 master status,中 Position 是否和配置的一致 # 手动将master上的orders库结构、数据导入到slave上 # 重启slave # start slave;
问题:
每次执行git pull后会提示输入公钥密码
Enter passphrase for key '/root/.ssh/id_rsa':
解决办法参考:
http://askubuntu.com/questions/362280/enter-ssh-passphrase-once
依次执行:
$ssh-agent bash $ssh-add /home/username/.ssh/id_rsa Enter passphrase for /home/username/.ssh/id_rsa: Identity added: /home/username/.ssh/id_rsa (/home/username/.ssh/id_rsa)
输入密码后,出现Identity added后解决。
先用macport安装jpegoptim
port install jpegoptim
安装完毕后,即可使用,-h 查看参数用法
$ jpegoptim banner1.jpg banner1.jpg 1024x683 24bit Exif Adobe [OK] 156339 --> 155426 bytes (0.58%), optimized.
还可以在某个文件夹下批量进行压缩
find . -iname '*.jpg' -print0 | xargs -0 jpegoptim --max=90 --strip-all --preserve --totals --all-progressive
除此之外,还有一个专门压缩PNG的软件 optipng
1.获取证书,有一些官方出售的证书,但也有免费的比如SSL For Free,而且背后有一些主要的赞助商,例如Mozilla,Chrome,Akamai和Cisco。
2.进入网站后输入您网站的域名,按照提示,选择自动FTP验证或手动验证,验证成功后就可以获得证书,下载应该得到一个sslforfree.zip的压缩包,解压后有3个文件,依次是:ca_bundle.crt(CA /链证书) certificate.crt(针对网站的SSL证书) private.key(证书私钥)
3.接着网站提示的步骤”Installing your SSL Certificate”,找到对应自己web服务器的标签,这里我以Nginx为例:
$ cat certificate.crt ca_bundle.crt >> cert_chain.crt
-----END CERTIFICATE----------BEGIN CERTIFICATE-----
-----END CERTIFICATE----- -----BEGIN CERTIFICATE----
#http访问时301重定向到https server { listen 80; server_name www.ssmvv.com ssmnx.com; return 301 https://$server_name$request_uri; } server { listen 443; ssl on; ssl_certificate /etc/ssl/cert_chain.crt; ssl_certificate_key /etc/ssl/www.ssmvv.com.key; server_name www.ssmvv.com ssmnx.com; ... }
默认的配置是:
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ { expires 30d; }
改成如下:
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ { valid_referers none blocked *.ssmnx.com ssmnx.com *.qq.com *.baidu.com *.google.com; if ($invalid_referer) { rewrite ^/ http://www.ssmvv.com/epinv.png; } expires 30d; }
解释:
1.”gif|jpg|jpeg|png|bmp|swf” 设置防盗链文件类型,自行修改,每个后缀用 “|” 符号分开!
2.”valid_referers none blocked *.ssmnx.com ssmnx.com *.qq.com *.baidu.com *.google.com;” 允许文件链出的域名白名单 域名与域名直接用空格分开,*.google.com 搜索引擎收录时可能有图片加载,所以这里加入了白名单。
3.”rewrite ^/ http://www.ssmvv.com/epinv.png;” 盗链后返回的图片,注意!此图片要放在没有设置防盗链的网站上。
github私有仓库的费用太贵,有VPS可以自己搭建一个专属git服务器
其实没什么需要安装的,git的默认协议SSH不需要什么配置,主要是方便和安全方面的优化
为了安全,我们为git仓库专门设置一个管理用户git,约定使用 /srv/git 放置仓库
$ sudo useradd \ --create-home \ --home-dir=/srv/git \ --root=/srv/git \ --base-dir=/srv/git \ --shell=/usr/bin/git-shell \ git $ sudo passwd git
--create-home --home-dir=/srv/git
创建用户主目录,将来可以添加SSH KEY登录方式,和代码仓库放在一起方便管理
--root=/srv/git
限制这个用户的访问目录在/srv/git,不能访问其它路径,这是出于安全考虑
--base-dir=/srv/git
用户base目录,即默认的父目录.帮助简化了克隆时的目录前缀
--shell=/usr/bin/git-shell
只允许用户用于管理仓库,不得执行其它命令
初始化一个裸仓库,即只包含仓库信息,不包含代码
$ sudo git --bare init /srv/git/MY_PROJECT.git
不需要其它配置了,就这么简单
MYHOST就是VPS的主机地址
$ git clone git@MYHOST:MY_PROJECT.git
这是创建用户时指定的 –base-dir 立的功,让你不用输入完整的目录 /srv/git/MY_PROJECT.git
$ ssh git@MYHOST git@MYHOST's password: fatal: Interactive git shell is not enabled.hint: ~/git-shell-commands should exist and have read and execute access. Connection to MYHOST closed.
gitweb默认需要在 /var/www/git 下放置cgi程序和仓库代码,但我们把仓库安装在了 /srv/git 下,所以做个软链接
# ln -s /srv/git /var/www/git # yum install gitweb # ls /var/www/git gitweb.cgi static PROJECT.git
可以看到yum安装后多出了这两个: gitweb.cgi static
刚才安装的gitweb只是一套动态程序,HTTP访问还要借助lighttpd apache等web服务器.而git自带的命令instaweb可以自动创建web服务器的配置文件.指定–httpd参数为lighttpd即可
# sudo -i # cd /var/www/git # git init # yum install lighttpd # git instaweb --httpd=lighttpd --port=1234 No known browser available. http://127.0.0.1:1234
# sudo -i # cd /var/www/git
因为 /var/www/git 是git用户的home目录,因此普通用户可能没有权限cd,所以需要-i参数保持root权限.
注意:git instaweb 不能指定document root目录,所以在哪个目录下执行,就展示那个目录下的仓库.因而需要先cd到这里
# git init
git instaweb创建的web服务器配置文件,需要一个git仓库来存放.
到这里就可以访问git仓库了,但没有完,还需要外界可以访问,并且要限制访问.这时可以借助nginx,或者修改lighttpd的配置文件
server { listen 80; server_name git.MYHOST.COM location / { auth_basic "git web require auth"; auth_basic_user_file /srv/etc/passwd; proxy_pass http://127.0.0.1:1234/; } }
有关auth_basic的配置可以参阅 http://nginx.org/en/docs/http/ngx_http_auth_basic_module.html
到这一步就结束了,现在访问 http://git.MYHOST.COM/ 即可浏览仓库信息
如果你觉得这个web界面太丑陋的话,可以看看 https://github.com/kogakure/gitweb-theme ,这个项目提供了更优雅的主题界面:http://kogakure.github.io/gitweb-theme/
将公钥添一行一个添加到 /srv/git/.ssh/authorized_keys 即可
转自:小艾的博客
#使用find命令可以创建与源一致的目录结构 find /usr/local -type d -exec mkdir -p /tmp/{} \; #这条命令将在/tmp目录下创建与 /usr/local一致的目录,此外如果要执行多个命令可以在分号后面继续添加-exec指令,如 find /usr/local -type d -exec mkdir -p /tmp/{} \;-exec print {} \;
msiexec /i "C:\Users\John\Downloads\Pix4Dmapper.msi" /L*V "C:\Users\John\Documents\pix4d.log"