为Centos5添加网易163、Sohu的yum源
将yum的目标服务器更改为中国大陆服务器镜像
以下的URL地址我都验证过了在当前完全可以下载,而且速度挺快.
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak
vi /etc/yum.repos.d/CentOS-Base.repo
- # CentOS-Base.repo
- #
- # This file uses a new mirrorlist system developed by Lance Davis for CentOS.
- # The mirror system uses the connecting IP address of the client and the
- # update status of each mirror to pick mirrors that are updated to and
- # geographically close to the client. You should use this for CentOS updates
- # unless you are manually picking other mirrors.
- #
- # If the mirrorlist= does not work for you, as a fall back you can try the
- # remarked out baseurl= line instead.
- #
- #
- [base]
- name=CentOS-$releasever - Base
- baseurl=http://mirror.be10.com/centos/$releasever/os/$basearch/
- http://ftp.iasi.roedu.net/mirrors/centos.org/$releasever/os/$basearch/
- http://ftp.ncnu.edu.tw/Linux/CentOS/$releasever/os/$basearch/
- http://ftp.hostrino.com/pub/centos/
- gpgcheck=1
- gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-centos4
- #released updates
- [update]
- name=CentOS-$releasever - Updates
- baseurl=http://mirror.be10.com/centos/$releasever/os/$basearch/
- http://ftp.iasi.roedu.net/mirrors/centos.org/$releasever/os/$basearch/
- http://ftp.ncnu.edu.tw/Linux/CentOS/$releasever/os/$basearch/
- http://ftp.hostrino.com/pub/centos/
- gpgcheck=1
- gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-centos4
- #packages used/produced in the build but not released
- [addons]
- name=CentOS-$releasever - Addons
- baseurl=http://mirror.be10.com/centos/$releasever/os/$basearch/
- http://ftp.iasi.roedu.net/mirrors/centos.org/$releasever/os/$basearch/
- http://ftp.ncnu.edu.tw/Linux/CentOS/$releasever/os/$basearch/
- http://ftp.hostrino.com/pub/centos/
- gpgcheck=1
- gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-centos4
- #additional packages that may be useful
- [extras]
- name=CentOS-$releasever - Extras
- baseurl=http://mirror.be10.com/centos/$releasever/os/$basearch/
- http://ftp.iasi.roedu.net/mirrors/centos.org/$releasever/os/$basearch/
- http://ftp.ncnu.edu.tw/Linux/CentOS/$releasever/os/$basearch/
- http://ftp.hostrino.com/pub/centos/
- gpgcheck=1
- gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-centos4
- #additional packages that extend functionality of existing packages
- [centosplus]
- name=CentOS-$releasever - Plus
- baseurl=http://mirror.centos.org/centos/$releasever/centosplus/$basearch/
- gpgcheck=1
- enabled=0
- gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-centos4
- #contrib - packages by Centos Users
- [contrib]
- name=CentOS-$releasever - Contrib
- baseurl=http://mirror.centos.org/centos/$releasever/contrib/$basearch/
- gpgcheck=1
- enabled=0
- gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-centos4
=======================================================================
或者直接下载SOHU 163 开源镜像服务器的配置文件到当前目录:
或者直接下载163 SOHU 镜像服务区
====================================
wget http://mirrors.163.com/.help/CentOS-Base-163.repo
wget http://mirrors.sohu.com/help/CentOS-Base-sohu.repo
yum makecache
yum update
【原创文章】更改windows2003默认的用户名,及其修改用户密码(图解)
今天有个朋友问我修改2003服务器系统默认的administrator帐号的方法,现在写出来和大家分享下。
一种方法是按"开始"--"运行" 输入: gpedit.msc
然后在"计算机配置"--"windows设置"--"安全设置"--"本地策略"--"安全选项" 那里
找到最下面的"帐号:重命名系统管理员帐号"那里改用户名.在"交互式登陆:不显示上一次的用户名"设置为"启用".
或者可以打开“我的计算机”--“控制面板”---“用户帐户”--“本地用户和组”---“用户”--“administrator”--右键单击“administrator”--选择“重命名”----在出现的名称设置框中,设置新的管理员名称----输入新的用户名。
重新启动系统,就可生效@!
原来2003默认管理帐号:administartor 已经无法登入!
使用新修改后的帐号(liuxinxiu.com)和密码(liuxinxiu.com)进行登入!
=========================================================================
具体修改密码的方法如下:
重复输入2次新密码点击:“确定” 然后重新启动系统!就可生效!@
改服务器密码对安全还是很有必要的,要是服务器用默认帐号密码简单,用穷举法很容易破解管理员权限。
修改windows2003默认远程桌面端口号【文章】:http://liuxinxiu.com/3389
为linux添加ip或网卡的方法
ls ifcfg-eth0*
可以看到有
ifcfg-eth0
如果以前配过别的ip,可能会有
ifcfg-eth0:0
ifcfg-eth0:1
等等
如果没有,就编辑一个ifcfg-eth0:0的文件,如果有,就在最大数上加一。文件内容:
IPADDR=”192.168.0.10″
NETMASK=”"
IPADDR就是要加的新的IP,如果有多个连续IP,可以写成:
IPADDR=”192.168.0.10-11″
NETMASK=”"
文件编辑完之后,运行:
/etc/init.d/network reload
用ifconfig看新的IP是否已经加上。
如果是为第二块网卡配IP,在/etc/sysconfig/network-scripts目录下编辑一个ifcfg-eth1的文件:
DEVICE=eth1
ONBOOT=yes
BOOTPROTO=static
IPADDR=192.168.0.18
NETMASK=255.255.255.0
GATEWAY=192.168.0.1
修改一下IPADDR,NETMASK和GATEWAY的参数。
运行:
/etc/init.d/network reload
用ifconfig看新的IP是否已经加上。
高级SSH安全技巧【转载】
在这篇文章中我将为你展示一些简单的技巧,帮助你提高你的SSH服务的安全。SSH服务器配置文件是/etc/ssh/sshd_conf。在你对它进行每一次改动后都需要重新启动SSH服务,以便让改动生效。
1、修改SSH监听端口
默认情况下,SSH监听连接端口22,攻击者使用端口扫描软件就可以看到主机是否运行有SSH服务,将SSH端口修改为大于1024的端口是一个明智的选择,因为大多数端口扫描软件(包括nmap)默认情况都不扫描高位端口。
打开/etc/ssh/sshd_config文件并查找下面这样的行:
Port 22
修改端口号并重新启动SSH服务:
/etc/init.d/ssh restart
2、仅允许SSH协议版本2
有两个SSH协议版本,仅使用SSH协议版本2会更安全,SSH协议版本1有安全问题,包括中间人攻击(man-in-the-middle)和注入(insertion)攻击。编辑/etc/ssh/sshd_config文件并查找下面这样的行:
Protocol 2,1
修改为
Protocol 2
3、仅允许特定的用户通过SSH登陆
你不一个允许root用户通过SSH登陆,因为这是一个巨大的不必要的安全风险,如果一个攻击者获得root权限登陆到你的系统,相对他获得一个普通用户权限能造成更大的破坏,配置SSH服务器不允许root用户通过SSH登陆,查找下面这样的行:
PermitRootLogin yes
将yes修改为no,然后重新启动服务。现在,如果你想使用特权用户,你可以先以其他用户登陆,然后再转换到root。
创建一个没有实际权限的虚拟用户是一个明智的选择,用这个用户登陆SSH,即使这个用户遭到破解也不会引起什么破坏,当创建这个用户时,确保它属于wheel组,因为那样你才能切换到特权用户。
如果你想让一列用户都能通过SSH登陆,你可以在sshd_config文件中指定它们,例如:我想让用户anze、dasa、kimy能通过SSH登陆,在sshd_config文件的末尾我添加下面这样一行:
AllowUsers anze dasa kimy
4、创建一个自定义SSH banner
如果你想让任何连接到你SSH服务的用户看到一条特殊的消息,你可以创建一个自定义SSH banner,只需要创建一个文本文件(我的是/etc/ssh-banner.txt),然后输入你想的任何文本消息,如:
*This is a private SSH service. You are not supposed to be here.*
*Please leave immediately. *
编辑好后,保存这个文件,在sshd_config中查找下面这样一行:
#Banner /etc/issue.net
取消掉注释【将#去掉】,然后将路径修改为你自定义的SSH banner文本文件。
5、使用DSA公钥认证
代替使用用户名和密码对SSH进行认证,你可以使用DSA公钥进行认证,注意你既可以使用登陆名,也可以使用DSA公钥进行认证,使用DSA公钥认证可以预防你的系统遭受字典攻击,因为你不需要用登陆名和密码登陆SSH服务,而是需要一对DSA密钥,一个公钥和一个私钥,在你本地机器上保存私钥,将公钥放在服务器上。当你发起一个SSH登陆会话时,服务器检查密钥,如果它们匹配的话,你就可以直接进入shell,如果它们不匹配,你的连接将被自动断开。
在本例中的私人计算机叫‘工作站1’,服务器叫‘服务器1’。在两个机器上我有相同的home目录,如果服务器和客户端上的home目录不同将不能工作,实现,你需要在你的私人计算机上创建一对密钥,命令:~$ ssh-keygen -t dsa,它将要求你为私钥输入一个密语,但是你可以保留为空,因为这不是一个推荐的做法。密钥对创建好了:你的私钥在~/.ssh/id_dsa,你的公钥在.ssh/id_dsa.pub。
接下来,拷贝~/.ssh/id_dsa.pub中的内容到‘服务器1’的~/.ssh/authorized_keys文件中,~/.ssh/id_dsa.pub的内容看起来象下面这样:
~$ cat .ssh/id_dsa.pub
ssh-dss AAAAB3NzaC1kc3MAAACBAM7K7vkK5C90RsvOhiHDUROvYbNgr7YEqtrdfFCUVwMWc
JYDusNGAIC0oZkBWLnmDu+y6ZOjNPOTtPnpEX0kRoH79maX8NZbBD4aUV91lbG7z604ZTdr
LZVSFhCI/Fm4yROHGe0FO7FV4lGCUIlqa55+QP9Vvco7qyBdIpDuNV0LAAAAFQC/9ILjqII7n
M7aKxIBPDrQwKNyPQAAAIEAq+OJC8+OYIOeXcW8qcB6LDIBXJV0UT0rrUtFVo1BN39cAWz5pu
Fe7eplmr6t7Ljl7JdkfEA5De0k3WDs
9/rD1tJ6UfqSRc2qPzbn0p0j89LPIjdMMSISQqaKO4m2fO2VJcgCWvsghIoD0AMRC7ngIe6bta
NIhBbqri10RGL5gh4AAACAJj1/rV7iktOYuVyqV3BAz3JHoaf+H/dUDtX+wuTuJpl+tfDf61rb
WOqrARuHFRF0Tu/Rx4oOZzadLQovafqrDnU/No0Zge+WVXdd4ol1YmUlRkqp8vc20ws5mLVP
34fST1amc0YNeBp28EQi0xPEFUD0IXzZtXtHVLziA1/NuzY= anze@station1.example.com
如果文件~/.ssh/authorized_keys已经存在,请将上面的内容附加在该文件的后面。剩下的只是给该文件设置正确的权限了:
~$ chmod 600 ~/.ssh/authorized_keys
现在,配置sshd_config文件使用DSA密钥认证,确保你将下面三行前的注释去掉了:
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile %h/.ssh/authorized_keys
重新启动服务,如果你的配置没有错误,现在你就可以SSH到你的服务器,而且无需任何交互动作(如输入用户名和密码)就直接进入你的home目录了。
如果你只想使用DSA认证登陆,确保你在sshd_config中取消掉注释并修改PasswordAuthentication这一行,将yes改为no:
PasswordAuthentication no
任何在服务器上没有公钥的人试图连接到你的SSH服务,它就被拒绝,给它显示如下一个拒绝提示信息:
Permission denied (publickey).
6、使用TCP wrappers仅允许指定的主机连接
如果你想在你的网络上只允许特定的主机才能连接到你的SSH服务,但又不想使用或弄乱你的iptables配置,那这个方法非常有用,你可以使用TCP wrappers。在这个例子中对sshd进行TCP包裹,我将创建一条规则允许本地子网192.168.1.0/24和远程193.180.177.13的自己连接到我的SSH服务。
默认情况下,TCP wrappers首先在/etc/hosts.deny中查找看主机是否允许访问该服务,接下来,TCP wrappers查找/etc/hosts.allow看是否有规则允许该主机服务指定的服务,我将在/etc/hosts.deny中创建一个规则,如下:
sshd: ALL
这意味着默认情况下所有主机被拒绝访问SSH服务,这是应该的,否则所有主机都能访问SSH服务,因为TCP wrappers首先在hosts.deny中查找,如果这里没有关于阻止SSH服务的规则,任何主机都可以连接。
接下来,在/etc/hosts.allow中创建一个规则允许指定的主机使用SSH服务:
sshd: 192.168.1.0/24 193.180.177.13
现在,只有来自192.168.1.0/24和193.180.177.13的主机能够访问SSH服务了,其他主机在连接时还没有到登陆提示符时就被断开了,并收到错误提示,如下:
ssh_exchange_identification: Connection closed by remote host
=====================================================
方法1、iptables。
iptables -A INPUT -s 192.168.1.100 --destination-port 22 -j ACCEPT
iptables -A INPUT --destination 22 -j DROP
方法2:
vi /etc/ssh/sshd_config
添加一行:
allowusers root@192.168.1.100
注:root为你用来登入服务器的用户名。
==========================================================
7、使用iptables允许特定的主机连接
作为TCP wrappers的一个代替品,你可以使用iptables来限制SSH访问(但可以同时使用这个两个的),这里有一个简单的例子,指出了如何允许一个特定的主机连接到你的SSH服务:
~# iptables -A INPUT -p tcp -m state --state NEW --source 193.180.177.13 --dport 22 -j ACCEPT
并确保没有其他的主机可以访问SSH服务:
~# iptables -A INPUT -p tcp --dport 22 -j DROP
保存你的新规则,你的任务就完成了,规则是立即生效的
8、SSH时间锁定技巧
你可以使用不同的iptables参数来限制到SSH服务的连接,让其在一个特定的时间范围内可以连接,其他时间不能连接。你可以在下面的任何例子中使用/second、/minute、/hour或/day开关。
第一个例子,如果一个用户输入了错误的密码,锁定一分钟内不允许在访问SSH服务,这样每个用户在一分钟内只能尝试一次登陆:
~# iptables -A INPUT -p tcp -m state --syn --state NEW --dport 22 -m limit --limit 1/minute --limit-burst 1 -j ACCEPT
~# iptables -A INPUT -p tcp -m state --syn --state NEW --dport 22 -j DROP
第二个例子,设置iptables只允许主机193.180.177.13连接到SSH服务,在尝试三次失败登陆后,iptables允许该主机每分钟尝试一次登陆:
~# iptables -A INPUT -p tcp -s 193.180.177.13 -m state --syn --state NEW --dport 22 -m limit --limit 1/minute --limit-burst 1 -j ACCEPT
~# iptables -A INPUT -p tcp -s 193.180.177.13 -m state --syn --state NEW --dport 22 -j DROP
9、结论
这些技巧都不是很难掌握,但是它们对于保护你的SSH服务却是很强劲的手段,花一点代价换来的是睡一个好觉。
【原创】更改SSH默认22端口或增加SSH端口的修改方法
以下教程以Fedora-13 为例
首先查看SELinux是否是开启状态,如果默认是开启先暂时关闭
// 查看SELinux的当前模式
# getenforce
// 设置SELinux的当前模式,1设为Enforcing,2设为Permissive
# setenforce 1|0
=====================================================
vi /etc/ssh/sshd_config
查找:#Port 22 去掉之前的# 并在以下新增加新端口999
Port 22
Port 999
无论你是想增加新端口999 还说想更改默认22端口为999
建议先保存22和999 请先同时保存两个端口以避免修改中出现失误导致无法登入到远程服务器!
之所以先设置成两个端口,测试成功后再关闭一个端口,是为了方式在修改conf的过程中,万一出现掉线、断网、误操作等未知情况时候,还能通过另外一个端口连接上去调试以免发生连接不上必须派人去机房,导致问题更加复杂麻烦。
更改完成并保存!重启SSHD:
*************************************************************************************
service sshd restart 或者 /etc/init.d/sshd restart
*************************************************************************************
然后修改防火墙规则:
vi /etc/sysconfig/iptables
添加新端口:-A INPUT -m state --state NEW -m tcp -p tcp --dport 999 -j ACCEPT
*************************************************************************************
保存之后重启防火墙规则:/etc/init.d/iptables restart 或者 service iptables restart
*************************************************************************************
现在请使用ssh工具连接999端口,来测试是否成功。如果连接成功了,则再次编辑sshd_config的设置,将里边的Port22删除,即可。
【原创】nginx负载均衡实例,亲测
nginx不单可以作为强大的web服务器,也可以作为一个七层的反向代理服务器,而且nginx还可以按照调度规则实现动态、静态页面的分离,可以按照轮询、ip哈希、URL哈希、权重等多种方式对后端服务器做负载均衡,同时还支持后端服务器的健康检查。
如果将web服务器集群当做一个城池,那么负载均衡服务器就相当于城门,重要性不言而喻,如果“城门”关闭了,与外界的通道也就掐断了,如果只有一台nginx负载均衡服务器,当该服务器发生故障时,则会整个网站无法访问,因此,就需要两台以上的nginx负载均衡服务器,实现故障转移与高可用,双机高可用暂不详细介绍。
下面就是一个生产实例。
aaa.liuxinxiu.com 和 bbb.liuxinxiu.com 域名均指向 Nginx 所在的服务器IP。
用户访问http://aaa.liuxinxiu.com/,将其负载均衡到120.9.123.121:80、202.108.22.142:80 这两台服务器。
用户访问http://bbb.liuxinxiu.com/,将其负载均衡到60.5.185.59:80、120.9.123.121:80、202.108.22.142:80 这三台服务器。
============================================================================
注意:
ip_hash来代替默认的rr方式,即可以将某客户端IP的请求通过哈希算法定位到同一台后端web服务器上,这样避免了session丢失,解决了session问题。但ip_hash指令无法保证后端服务器的负载均衡,可能有些后端服务器接收的请求多,有些后端服务器接收的请求少;这样失去了负载均衡的意义,所以,如果后端的动态应用服务器做到session共享,还是建议采用后端服务器的session共享方式来代替nginx的ip_hash方式。
===================================================================】】
以下是AAA组分配的2组负载均衡服务器,规则更加反应速度,快者NGINX优先选择,ip_hash; 这种形式只能使用IP分配!
BBB组分配的三组负载均衡服务器,采用默认顺序规则,由上至下依次选择,如果最上边60.5.185.59这组服务器DOWN掉选择中间120.9.123.121这组,如果中间这组挂掉则NGINX自动202.108.22.142最下边这组IP主机!
BBB虚拟主机SERVER中的配置内容:
注,选择中的部分:
#root /ftp/101;
index index.html index.htm index.php;
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ {
expires 30d;
}
location ~ .*\.(htm|html|js|css)$ {
expires 1h;
}
可以忽略不添加,或者注释掉也可以!!!!!!
AAA在SERVER中的添加内容和BBB类似!
Nginx Location 语法,与简单配置
一、介绍Nginx是俄罗斯人编写的十分轻量级的HTTP服务器,Nginx,它的发音为“engine X”, 是一个高性能的HTTP和反向代理服务器,同时也是一个IMAP/POP3/SMTP 代理服务器.
二、Location语法语法:location [=|~|~*|^~] /uri/ { … }
注:
1、~ 为区分大小写匹配
2、~* 为不区分大小写匹配
3、!~和!~*分别为区分大小写不匹配及不区分大小写不匹配
示例一:
location / { }
匹配任何查询,因为所有请求都以 / 开头。但是正则表达式规则将被优先和查询匹配。
示例二:
location =/ {}
仅仅匹配/
示例三:
location ~* \.(gif|jpg|jpeg)$ {
rewrite \.(gif|jpg)$ /logo.png;
}
注:不区分大小写匹配任何以gif,jpg,jpeg结尾的文件
三、ReWrite语法
last - 基本上都用这个Flag。
break - 中止Rewirte,不在继续匹配
redirect - 返回临时重定向的HTTP状态302
permanent - 返回永久重定向的HTTP状态301
1、下面是可以用来判断的表达式:
-f和!-f用来判断是否存在文件
-d和!-d用来判断是否存在目录
-e和!-e用来判断是否存在文件或目录
-x和!-x用来判断文件是否可执行
2、下面是可以用作判断的全局变量
例:http://localhost:88/test1/test2/test.php
$host:localhost
$server_port:88
$request_uri:http://localhost:88/test1/test2/test.php
$document_uri:/test1/test2/test.php
$document_root:D:\nginx/html
$request_filename:D:\nginx/html/test1/test2/test.php
四、Redirect语法
server {
listen 80;
server_name start.igrow.cn;
index index.html index.php;
root html;
if ($http_host !~ "^www\.itlearner\.com$ {
rewrite ^(.*) http://www.itlearner.com$1 redirect;
}
}
五、防盗链location ~* \.(gif|jpg|swf)$ {
valid_referers none blocked start.igrow.cn sta.igrow.cn;
if ($invalid_referer) {
rewrite ^/ http://$host/logo.png;
}
}
六、根据文件类型设置过期时间
location ~* \.(js|css|jpg|jpeg|gif|png|swf)$ {
if (-f $request_filename) {
expires 1h;
break;
}
}
七、禁止访问某个目录
location ~* \.(txt|doc)${
root /data/www/wwwroot/linuxtone/test;
deny all;
}
++ 一些可用的全局变量
$args
$content_length
$content_type
$document_root
$document_uri
$host
$http_user_agent
$http_cookie
$limit_rate
$request_body_file
$request_method
$remote_addr
$remote_port
$remote_user
$request_filename
$request_uri
$query_string
$scheme
$server_protocol
$server_addr
$server_name
$server_port
$uri
nginx负载均衡和lvs负载均衡的比较分析【转载】
lvs和nginx都可以用作多机负载的方案,它们各有优缺,在生产环境中需要好好分析实际情况并加以利用。
首先提醒,做技术切不可人云亦云,我云即你云;同时也不可太趋向保守,过于相信旧有方式而等别人来帮你做垫被测试。把所有即时听说到的好东西加以钻研,从而提高自己对技术的认知和水平,乃是一个好习惯。
下面来分析一下两者:
一、lvs的优势:
1、抗负载能力强,因为lvs工作方式的逻辑是非常之简单,而且工作在网络4层仅做请求分发之用,没有流量,所以在效率上基本不需要太过考虑。在我手里的lvs,仅仅出过一次问题:在并发最高的一小段时间内均衡器出现丢包现象,据分析为网络问题,即网卡或linux2.4内核的承载能力已到上限,内存和cpu方面基本无消耗。
2、配置性低,这通常是一大劣势,但同时也是一大优势,因为没有太多可配置的选项,所以除了增减服务器,并不需要经常去触碰它,大大减少了人为出错的几率。
3、工作稳定,因为其本身抗负载能力很强,所以稳定性高也是顺理成章,另外各种lvs都有完整的双机热备方案,所以一点不用担心均衡器本身会出什么问题,节点出现故障的话,lvs会自动判别,所以系统整体是非常稳定的。
4、无流量,上面已经有所提及了。lvs仅仅分发请求,而流量并不从它本身出去,所以可以利用它这点来做一些线路分流之用。没有流量同时也保住了均衡器的IO性能不会受到大流量的影响。
5、基本上能支持所有应用,因为lvs工作在4层,所以它可以对几乎所有应用做负载均衡,包括http、数据库、聊天室等等。
另:lvs也不是完全能判别节点故障的,譬如在wlc分配方式下,集群里有一个节点没有配置VIP,会使整个集群不能使用,这时使用wrr分配方式则会丢掉一台机。目前这个问题还在进一步测试中。所以,用lvs也得多多当心为妙。
二、nginx和lvs作对比的结果
1、nginx工作在网络的7层,所以它可以针对http应用本身来做分流策略,比如针对域名、目录结构等,相比之下lvs并不具备这样的功能,所以nginx单凭这点可利用的场合就远多于lvs了;但nginx有用的这些功能使其可调整度要高于lvs,所以经常要去触碰触碰,由lvs的第2条优点看,触碰多了,人为出问题的几率也就会大。
2、nginx对网络的依赖较小,理论上只要ping得通,网页访问正常,nginx就能连得通,nginx同时还能区分内外网,如果是同时拥有内外网的节点,就相当于单机拥有了备份线路;lvs就比较依赖于网络环境,目前来看服务器在同一网段内并且lvs使用direct方式分流,效果较能得到保证。另外注意,lvs需要向托管商至少申请多一个ip来做Visual IP,貌似是不能用本身的IP来做VIP的。要做好LVS管理员,确实得跟进学习很多有关网络通信方面的知识,就不再是一个HTTP那么简单了。
3、nginx安装和配置比较简单,测试起来也很方便,因为它基本能把错误用日志打印出来。lvs的安装和配置、测试就要花比较长的时间了,因为同上所述,lvs对网络依赖比较大,很多时候不能配置成功都是因为网络问题而不是配置问题,出了问题要解决也相应的会麻烦得多。
4、nginx也同样能承受很高负载且稳定,但负载度和稳定度差lvs还有几个等级:nginx处理所有流量所以受限于机器IO和配置;本身的bug也还是难以避免的;nginx没有现成的双机热备方案,所以跑在单机上还是风险较大,单机上的事情全都很难说。
5、nginx可以检测到服务器内部的故障,比如根据服务器处理网页返回的状态码、超时等等,并且会把返回错误的请求重新提交到另一个节点。目前lvs中ldirectd也能支持针对服务器内部的情况来监控,但lvs的原理使其不能重发请求。重发请求这点,譬如用户正在上传一个文件,而处理该上传的节点刚好在上传过程中出现故障,nginx会把上传切到另一台服务器重新处理,而lvs就直接断掉了,如果是上传一个很大的文件或者很重要的文件的话,用户可能会因此而恼火。
6、nginx对请求的异步处理可以帮助节点服务器减轻负载,假如使用apache直接对外服务,那么出现很多的窄带链接时apache服务器将会占用大量内存而不能释放,使用多一个nginx做apache代理的话,这些窄带链接会被nginx挡住,apache上就不会堆积过多的请求,这样就减少了相当多的内存占用。这点使用squid也有相同的作用,即使squid本身配置为不缓存,对apache还是有很大帮助的。lvs没有这些功能,也就无法能比较。
7、nginx能支持http和email(email的功能估计比较少人用),lvs所支持的应用在这点上会比nginx更多。
在使用上,一般最前端所采取的策略应是lvs,也就是DNS的指向应为lvs均衡器,lvs的优点令它非常适合做这个任务。
重要的ip地址,最好交由lvs托管,比如数据库的ip、webservice服务器的ip等等,这些ip地址随着时间推移,使用面会越来越大,如果更换ip则故障会接踵而至。所以将这些重要ip交给lvs托管是最为稳妥的,这样做的唯一缺点是需要的VIP数量会比较多。
nginx可作为lvs节点机器使用,一是可以利用nginx的功能,二是可以利用nginx的性能。当然这一层面也可以直接使用squid,squid的功能方面就比nginx弱不少了,性能上也有所逊色于nginx。
nginx也可作为中层代理使用,这一层面nginx基本上无对手,唯一可以撼动nginx的就只有lighttpd了,不过lighttpd目前还没有能做到nginx完全的功能,配置也不那么清晰易读。另外,中层代理的IP也是重要的,所以中层代理也拥有一个VIP和lvs是最完美的方案了。
nginx也可作为网页静态服务器,不过超出了本文讨论的范畴,简单提一下。
具体的应用还得具体分析,如果是比较小的网站(日PV<1000万),用nginx就完全可以了,如果机器也不少,可以用DNS轮询,lvs所耗费的机器还是比较多的;大型网站或者重要的服务,机器不发愁的时候,要多多考虑利用lvs。
【原创】Linux 配置Nginx反向代理(可用于负载均衡)
反向代理是什么?
反向代理指以代理服务器来接受Internet上的连接请求,然后将请求转发给内部(或其他)网络上的服务器,并将从服务器上得到的结果返回给Internet上请求连接的客户端。
实现方法:
比如我想在Nginx上建一个bbb的域名,使用NGINX通过该域名反向代理访问百度网站,首先在把bbb添加值本机HOST文件中,WINDOWS机器在:C:\WINDOWS\system32\drivers\etc 下修改hosts 用记事本打开在127.0.0.1 下一行添加:
127.0.0.1 localhost
221.221.161.147 bbb
IP地址部分对应你的LINUX主机IP
bbb 为测试域名
再在Linux上修改Nginx的配置文件,添加如下:
server
{
listen 80;
server_name bbb;
location / {
proxy_pass http://www.baidu.com/;
proxy_redirect off;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
-----------------------------------------------------------------------------------------------------------------
添加好后,先执行:/usr/local/nginx/sbin/nginx -t 检查配置是否正常,如果显示:the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok configuration file /usr/local/nginx/conf/nginx.conf test is successful 则正常,否则按错误提示修改配置。
再执行 kill -HUP `cat /usr/local/nginx/logs/nginx.pid` 使配置生效,域名解析生效后就可以通过BBB 访问百度了。
=================================================================
server
{
listen 8080;
server_name 192.168.2.127;
location / {
proxy_pass http://www.baidu.com/;
proxy_redirect off;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
==============================================
【原创】Win2003下discuz论坛转移至Lnmp下注意事项(Rewrite重写、上传附件目录权限)
Discuz!在Nginx下的Rewrite
完整正确的Discuz!在Nginx下的Rewrite如下:
蓝色部分为完整的配置内容添加至,虚拟主机 server{} 内,不要放到 location {} 以内!
使之单独存在于:server{
location {}
if (!-e $request_filename)
{
rewrite ^/archiver/((fid|tid)-[w-]+.html)$ /archiver/index.php?$1 last;
rewrite ^/forum-([0-9]+)-([0-9]+).html$ /forumdisplay.php?fid=$1&page=$2 last;
rewrite ^/thread-([0-9]+)-([0-9]+)-([0-9]+).html$ /viewthread.php?tid=$1&extra=page%3D$3&page=$2 last;
rewrite ^/space-(username|uid)-(.+).html$ /space.php?$1=$2 last;
rewrite ^/tag-(.+).html$ /tag.php?name=$1 last;
break;
}
=======================================================================
discuz论坛由WIN移至Linux下,附件文件无法保存到服务器上的问题解决方案!
提示信息:附件文件无法保存到服务器,可能是目录属性设置问题,请与管理员联系。
解决方法:
问题1:attachement目录是否设置属性777,win主机属性everyone
DIDCUZ安装时提示: 设置目录属性(windows 服务器可忽略这一步)
以下这些目录需要可读写权限
./templates
./attachments
./forumdata
./forumdata/cache
./forumdata/templates
./forumdata/threadcaches
./forumdata/logs
LINUX下以上目录统一修改权限为777:
chown -R 777 templates
chown -R 777 attachments
chown -R 777 forumdata
chown -R 777 forumdata/cache
chown -R 777 forumdata/templates
chown -R 777 forumdata/threadcaches
chown -R 777 forumdata/logs
问题2:php.ini中的设置可能存在问题
将;upload_tmp_dir = 该行的注释符,即前面的分号“;”去掉,使该行在php.ini文档中起作用。upload_tmp_dir是用来定义上传文件存放的临时路径,在这里你还可以修改并给其定义一个绝对路径,这里设置的目录必须有读写权限。付给WWW可执行权限。
另外:
在nginx.conf增加 client_max_body_size的相关设置, 这个值默认是1m,可以增加到8m以增加提高文件大小限制;
如果运行的是php,那么还要检查php.ini,这个大小client_max_body_size要和php.ini中的如下值的最大值一致或者稍大,这样就不会因为提交数据大小不一致出现的错误。
post_max_size = 8M
upload_max_filesize = 2M
在php.ini中upload_max_filesize 的参数设置也增加到8M和NGINX相互一直,若不需要用上传超大附件,可以在DISCUZ后台限制用户上传附件大小 8M<
以上全部更改,确保了附件目录拥有了足够了权限之后若还说不能上传。见问题3
问题3:DISCUZ 后台更改附件附件 URL 地址
DISCUZ 默认设置:
后台 基本设置 附件设置 不小心开启远程附件或者没有设置完整也会出现此问题
后台 基本设置 附件设置 设置的附件保存方式为其他方式 不是保存在同一目录下 部分服务器限制了目录属性 导致无法上传附件(虚拟空间出现的比例较多)
可以尝试把附件 URL 地址: 修改为绝对路径如:
http://bbs.liuxinxiu.com/attachments
liuxinxiu 换成你的域名,不再根目录下加加子目录:http://www.liuxinxiu.com/bbs/attachments
==================================================================