作者:linux120
发布时间:December 14, 2012
分类:服务器配置
No Comments
默认使用Node.js开发的站点都是在3000端口下运行的,也就是说用户必须在网址中加入:3000才能访问站点,默认HTTP端口是80,因此必须监听80端口才会让网址看起来更简洁。当然,如果整个服务器只有node.js开发的一个站点,那么只需要让app.js监听80即可,但很多时候服务器上会有其他的web应用,比如php,python,ruby等,这时候就需要nginx反向代理node.js了。
配置nginx反向代理node.js只需要在配置文件中添加如下代码:
server{
listen 80;
server_name your_node_js_site.com;
location / {
proxy_pass http://localhost:3000;
}
}
重启nginx后即生效,使用nginx反向代理node.js还可以在nginx配置添加静态文件规则,同时删除node.js中app.js的app.user(express.static(__dirname+'/public'))以减少反向代理以及node.js的开销!
作者:linux120
发布时间:December 8, 2012
分类:服务器维护
No Comments
应需求需要将2.7G大小的sqlite迁移为Mysql,因sqlite3与mysql个别字段类型及长度不一致,导出的sql语句不能直接导入到mysql中,需要将sqlite .dump出来的sql语句用下列程序处理后再导入到mysql中,程序为python环境。
stm.py
#! /usr/bin/env python
### A python script written for SQLite migrate to Mysql by Linux120.com
import re, fileinput, tempfile
from optparse import OptionParser
IGNOREDPREFIXES = [
'PRAGMA',
'BEGIN TRANSACTION;',
'COMMIT;',
'DELETE FROM sqlite_sequence;',
'INSERT INTO "sqlite_sequence"',
]
def _replace(line):
if any(line.startswith(prefix) for prefix in IGNOREDPREFIXES):
return
line = line.replace("INTEGER PRIMARY KEY", "INTEGER AUTO_INCREMENT PRIMARY KEY")
line = line.replace("AUTOINCREMENT", "AUTO_INCREMENT")
line = line.replace("DEFAULT 't'", "DEFAULT '1'")
line = line.replace("DEFAULT 'f'", "DEFAULT '0'")
line = line.replace(",'t'", ",'1'")
line = line.replace(",'f'", ",'0'")
return line
def _backticks(line, in_string):
"""Replace double quotes by backticks outside (multiline) strings
>>> _backticks('''INSERT INTO "table" VALUES ('"string"');''', False)
('INSERT INTO `table` VALUES (\\'"string"\\');', False)
>>> _backticks('''INSERT INTO "table" VALUES ('"Heading''', False)
('INSERT INTO `table` VALUES (\\'"Heading', True)
>>> _backticks('''* "text":http://link.com''', True)
('* "text":http://link.com', True)
>>> _backticks(" ');", True)
(" ');", False)
"""
new = ''
for c in line:
if not in_string:
if c == "'":
in_string = True
elif c == '"':
new = new + '`'
continue
elif c == "'":
in_string = False
new = new + c
return new, in_string
def _process(opts, lines):
if opts.database:
yield '''\
drop database {d};
create database {d} character set utf8;
grant all on {d}.* to {u}@'%' identified by '{p}';
use {d};\n'''.format(d=opts.database, u=opts.username, p=opts.password)
yield "SET sql_mode='NO_BACKSLASH_ESCAPES';\n"
in_string = False
for line in lines:
if not in_string:
line = _replace(line)
if line is None:
continue
line, in_string = _backticks(line, in_string)
yield line
def _removeNewline(line, in_string):
new = ''
for c in line:
if not in_string:
if c == "'":
in_string = True
elif c == "'":
in_string = False
elif in_string:
if c == "\n":
new = new + 'Newline333'
continue
if c == "\r":
new = new + 'carriagereturn333'
continue
new = new + c
return new, in_string
def _replaceNewline(lines):
for line in lines:
line = line.replace("Newline333", "\n")
line = line.replace("carriagereturn333", "\r")
yield line
def _Newline(lines):
in_string = False
for line in lines:
if line is None:
continue
line, in_string = _removeNewline(line, in_string)
yield line
def main():
op = OptionParser()
op.add_option('-d', '--database')
op.add_option('-u', '--username')
op.add_option('-p', '--password')
opts, args = op.parse_args()
lines = (l for l in fileinput.input(args))
lines = (l for l in _Newline(lines))
f = tempfile.TemporaryFile()
for line in lines:
f.write(line)
f.seek(0)
lines = (l for l in f.readlines())
f.close()
lines = (l for l in _process(opts, lines))
for line in _replaceNewline(lines):
print line,
if __name__ == "__main__":
main()
作者:linux120
发布时间:December 7, 2012
分类:服务器配置
No Comments
1、打开Apache配置文件
vi /etc/httpd/conf/httpd.conf 或 vi /usr/local/apache/conf/httpd.conf
2、设置关闭目录列表功能
去除Indexes 或是前面加上"-"号,如果要开启就写+Indexes
Options -Indexes
作者:linux120
发布时间:December 6, 2012
分类:服务器维护
No Comments
今天在帮一位客户(www.52verycd.com)将2.7G的SQLITE3文件转成Mysql5.1,具体迁移过程文章另撰,在导完数据以后在创建Mysql索引的时候发生如下错误:
mysql> CREATE INDEX cat1updtbriefttlidx on verycd (category1,updtime,brief,title);
ERROR 1170 (42000): BLOB/TEXT column 'category1' used in key specification without a key length
错误原因在于sqlite中对text类型做索引时没有附加要求,但是Mysql中text必须指定长度,这样建立索引的时候才会对长度有所约束。
解决办法:
ALTER TABLE将TEXT字段长度约束一下。
作者:linux120
发布时间:December 5, 2012
分类:服务器配置
No Comments
Mysql数据库生产环境下一般都是采用编译安装,这样性能会有较大的提升,但是源码包默认的编译参数会以debug模式生成二进制代码,该模式给mysql带来的性能损失比较大,所以一定要使用--without-debug参数。
如果把--with-mysqld-ldflags和--with-client-ldflagsliangge canshu shezhi wei --all-static的话,就是使用静态方式编译mysql,此时的性能最高,相比动态链接库要提高10%左右。
所以,建议大家在编译的时候使用--without-debug和--all-static参数。