Rootop 服务器运维与web架构

2011-09-08
发表者 Venus
暂无评论

HTTP Status 403 – Access to the requested resource has been denied

HTTP Status 403 – Access to the requested resource has been denied

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

type Status report

message Access to the requested resource has been denied

description Access to the specified resource (Access to the requested resource has been denied) has been forbidden.
——————————————————————————–

Apache Tomcat/7.0.21

      tomcat 管理用户登录时,报如上错误,折腾了很久,才搞定,而且不同的版本,配置文件也是不一样的。

服务器tomcat版本为:apache-tomcat-7.0.21.tar.gz  我最终的配置内容如下:

<?xml version=’1.0′ encoding=’utf-8′?>
<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=”nq” password=”nq” roles=”admin-gui,admin-script,manager-gui,manager-script,manager-jmx,manager-status”/>
</tomcat-users>

修改完tomcat-users.xml后重启tomcat服务,并且清空IE缓存密码表单等信息再次尝试登录!

如果你用了我上面的配置内容还是无法登陆,请尝试度娘及谷大爷中的其它配置代码。

2011-09-08
发表者 Venus
暂无评论

Linux下apache+tomcat+jdk+tomcat-connectors搭建jsp运行环境

      JSP(java Server Pages)  是由Sun 公司倡导、许多公司一起参与与建立的一种基于Java技术的动态网页技术标准。在传统的网页HTML文件中嵌入Java的一个脚本,由脚本完成查询数据库、重定向网页和发送电子邮件等动态操作。

     由于最终服务器运行的是二进制的文件,所以运行效率要比传统的脚本语言高。

     防止出问题,先把selinux、iptables关闭

     这里apache就不采用源码编译安装了,直接yum install -y httpd

     Apache 只是一个web服务器,不能运行jsp程序。如果要运行jsp程序,还需要安装Tomcat服务器软件,通过整合Tomcat 和Apache来运行jsp程序。

     JDK 是java 2 Development Kit (java 开发工具包)的缩写。

它是一组API,所有的Java应用程序都是构建在JDK之上的,Tomcat的运行需要JDK的支持,应先安装JDK。

    我所运行的系统为rhel5.5_64,到sun公司官网下载jdk的64位版本,本文用的版本为:jdk-7u4-linux-x64.rpm,直接 rpm 安装即可。(http://download.oracle.com/otn-pub/java/jdk/7u4-b20/jdk-7u4-linux-x64.rpm

程序会释放到 /usr/java/下,把jdk1.7.0_04做一个软链接:

[root@oracle ~]# cd /usr/java/
[root@oracle java]# ln -s jdk1.7.0_04/ jdk
[root@oracle java]# ll
总计 4
lrwxrwxrwx 1 root root   16 05-11 16:10 default -> /usr/java/latest
lrwxrwxrwx 1 root root   12 05-11 16:13 jdk -> jdk1.7.0_04/
drwxr-xr-x 8 root root 4096 05-11 16:10 jdk1.7.0_04
lrwxrwxrwx 1 root root   21 05-11 16:10 latest -> /usr/java/jdk1.7.0_04   

       tomcat 可以到apache官网下载:http://tomcat.apache.org/ 本文用的版本为:apache-tomcat-7.0.21.tar.gz ,直接解压到/var/local/tomcat 即可。(最新版http://mirror.bit.edu.cn/apache/tomcat/tomcat-7/v7.0.27/bin/apache-tomcat-7.0.27.tar.gz)

    编辑tomcat用户管理文件,添加一个名为“nq”的管理员用户,密码为nq。

[root@oracle~]# vi /usr/local/tomcat/conf/tomcat-users.xml      // 添加红色部分

<?xml version=’1.0′ encoding=’utf-8′?>
<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=”nq” password=”nq” roles=”admin-gui,admin-script,manager-gui,manager-script,manager-jmx,manager-status”/>
</tomcat-users>

保存退出,然后修改系统变量。

[root@oracle~]# vi /etc/profile           添加如下代码:

JAVA_HOME=/usr/java/jdk
CATALINA_HOME=/usr/local/tomcat
CLASSPATH=$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$CATALINA_HOME/lib/servlet-api.jar
PATH=$JAVA_HOME/bin:$PATH
export JAVA_HOME CATALINA_HOME CLASSPATH PATH

保存退出,执行命令让环境变量生效:

[root@oracle~]# source /etc/profile

启动tomcat:

[root@oracle ~]# /usr/local/tomcat/bin/startup.sh
Using CATALINA_BASE:   /usr/local/tomcat
Using CATALINA_HOME:   /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME:        /usr/java/jdk
Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
[root@oracle ~]#

      检查tomcat是否启动:

[root@oracle~]# netstat -anp | grep 8080
tcp        0      0 :::8080                     :::*                        LISTEN      5084/java
[root@oracle~]#

     在浏览器里访问http://172.17.1.113:8080/,可以看到tomcat的管理网页界面,并可以使用用户“nq”登陆管理。

      虽然Tomcat可以独立作为web服务器运行,但Tomcat的web功能远没有Apache强大,所以实际应用中是通过mod_jk2连接器将Apache和Tomcat整合在一起提供服务的,Apache处理静态页面的请求,Tomcat则用于处理JSP程序。

下载tomcat-connectors (http://labs.mop.com/apache-mirror//tomcat/tomcat-connectors/jk/tomcat-connectors-1.2.35-src.tar.gz)

下面开始编译mod_jk.so模块:

参考源码包中的BUILD.txt及native下的BUILDING.txt参考文档进行编译。

[root@oracle native]# yum install -y gcc
[root@oracle native]# yum install -y gcc-c++
[root@oracle native]# yum install -y httpd-devel
[root@oracle native]# yum install -y autoconf
[root@oracle native]# yum install -y libtool
[root@oracle native]# ./buildconf.sh   //先执行下自带的环境检查,根据提示缺什么装什么。
[root@oracle native]# ./configure –with-apxs=/usr/sbin/apxs      //一定要指定apxs路径,否则会报错找不到web server
[root@oracle native]# make
[root@oracle native]# make install   //可以自行复制到/etc/httpd/modules下,如果没有按照下面复制。
[root@oracle native]# cd apache-2.0/
[root@oracle apache-2.0]# ls
bldjk54.qclsrc  Makefile.apxs     mod_jk.a    mod_jk.lo
bldjk.qclsrc    Makefile.apxs.in  mod_jk.c    mod_jk.o
config.m4       Makefile.in       mod_jk.dsp  mod_jk.so
Makefile        Makefile.vc       mod_jk.la   NWGNUmakefile

(我在编译过程中遇到的问题参考:https://www.rootop.org/?p=772 )

安装mod_jk.so模块到apache:

[root@oracle apache-2.0]# cp mod_jk.so /etc/httpd/modules/

编辑 /etc/httpd/conf.d/mod_jk.conf 添加如下代码:

LoadModule jk_module modules/mod_jk.so
JkWorkersFile /etc/httpd/conf/workers.properties
JkShmFile /var/log/httpd/mod_jk.shm
JkLogFile /var/log/httpd/mod_jk.log
JkLogLevel info
JkMount /*/servlet/* ajp13
JkMount /*.jsp ajp13
JkMount /*.do ajp13
AddType application/x-jsp .jsp

[root@oracle~]# vi /etc/httpd/conf/workers.properties
[shm]
file=/etc/httpd/logs/shm.file
size=1048576
[channel.socket:localhost:8009]
tomcatId=localhost:8009
[uri:/jsp-examples/*]
workers.tomcat_home=/usr/local/tomcat
workers.java_home=/usr/java/jdk
ps=\
worker.list=ajp13
worker.ajp13.port=8009
worker.ajp13.host=localhost
worker.ajp13.type=ajp13
worker.ajp13.lbfactor=1
     要实现Apache和Tomcat的整合,需要设置Apache和Tomcat的主目录一致,应编辑Tomcat的主配置文件/usr/local/tomcat/conf/server.xml   //修改红色部分

代码:

 <Host name=”localhost”  appBase=”/var/www/html
            unpackWARs=”true” autoDeploy=”true”>
 <Context path=”” docBase=”” debug=”0″ />
重启apache tomcat服务,测试。

测试页:

test.jsp   代码如下:

<%@page import=”java.util.*”%>

Now Time is : <% out.println(new Date()); %>

测试效果如下:Now Time is : Sat May 12 11:19:04 CST 2012

(本文于2012/05/12 11:20 AM 最后修改)

2011-09-08
发表者 Venus
暂无评论

Apache配置CGI运行环境

       CGI是通用网关接口Common Gateway Interface 的缩写,用于连接网页和web服务器应用程序的接口。

        CGI 是web服务器运行的一个可执行程序,由网页的一个超链接激活并调用,并对该程序的返回结果进行处理,显示在客户端的web浏览器上。

        用CGI程序可以实现处理网页的表单处理、数据库查询、发送电子邮件等工作。

        CGI使网页变得不是静态的,而是交互的。

        CGI可以用任何一种语言编写,只要这种语言具有标准输入、输出和环境变量,如Perl、C、C++、Java,其中Perl易于编译调试、移植性颇强,可以说在众多的CGI编程语言中是最好最容易上手的语言。Perl几乎成了CGI的标准或代言词

[root@rhel ~]# rpm -qa perl
perl-5.8.8-27.el5                   //默认情况下,perl语言解释器会被系统默认安装

编辑apache的配置文件,找到 Options Indexes FollowSymLinks 设置存放CGI文件的目录权限

# The Options directive is both complicated and important.  Please see
# http://httpd.apache.org/docs/2.2/mod/core.html#options
# for more information.
#
    Options Indexes FollowSymLinks ExecCGI

#

如果不修改目录权限,会提示 forbidden

Forbidden

You don’t have permission to access /test.cgi on this server.


Apache/2.2.3 (Red Hat) Server at 172.17.1.113 Port 80

标明CGI程序的文件类型

AddHandler cgi-script .cgi .pl           //标明哪些拓展名为cgi
不注明文件类型的话,不会去调用perl去执行脚本,会直接显示出源代码。

保存退出,重启apache。

在网站根目录建立测试页:

[root@rhel ~]# vi /var/www/html/test.cgi
[root@rhel ~]#chmod o+x /var/www/html/test.cgi        //需要执行权限

test.cgi 代码如下:

#!/usr/bin/perl
print “Content-type: text/html\n\n”;
print “Network Questions\n”

然后通过浏览器访问: http://172.17.113/test.cgi

看到Network Questions 表明搭建成功。

2011-09-08
发表者 Venus
暂无评论

国家代号与区号

国家代号与区号

 

Countries and Regions 国家或地区 国际域名缩写 电话代码 时差
Angola 安哥拉 AO 244 -7
Afghanistan 阿富汗 AF 93 0
Albania 阿尔巴尼亚 AL 355 -7
Algeria 阿尔及利亚 DZ 213 -8
Andorra 安道尔共和国 AD 376 -8
Anguilla 安圭拉岛 AI 1264 -12
Antigua and Barbuda 安提瓜和巴布达 AG 1268 -12
Argentina 阿根廷 AR 54 -11
Armenia 亚美尼亚 AM 374 -6
Ascension 阿森松   247 -8
Australia 澳大利亚 AU 61 +2
Austria 奥地利 AT 43 -7
Azerbaijan 阿塞拜疆 AZ 994 -5
Bahamas 巴哈马 BS 1242 -13
Bahrain 巴林 BH 973 -5
Bangladesh 孟加拉国 BD 880 -2
Barbados 巴巴多斯 BB 1246 -12
Belarus 白俄罗斯 BY 375 -6
Belgium 比利时 BE 32 -7
Belize 伯利兹 BZ 501 -14
Benin 贝宁 BJ 229 -7
Bermuda Is. 百慕大群岛 BM 1441 -12
Bolivia 玻利维亚 BO 591 -12
Botswana 博茨瓦纳 BW 267 -6
Brazil 巴西 BR 55 -11
Brunei 文莱 BN 673 0
Bulgaria 保加利亚 BG 359 -6
Burkina-faso 布基纳法索 BF 226 -8
Burma 缅甸 MM 95 -1.3
Burundi 布隆迪 BI 257 -6
Cameroon 喀麦隆 CM 237 -7
Canada 加拿大 CA 1 -13
Cayman Is. 开曼群岛   1345 -13
Central African Republic 中非共和国 CF 236 -7
Chad 乍得 TD 235 -7
Chile 智利 CL 56 -13
China 中国 CN 86 0
Colombia 哥伦比亚 CO 57 0
Congo 刚果 CG 242 -7
Cook Is. 库克群岛 CK 682 -18.3
Costa Rica 哥斯达黎加 CR 506 -14
Cuba 古巴 CU 53 -13
Cyprus 塞浦路斯 CY 357 -6
Czech Republic 捷克 CZ 420 -7
Denmark 丹麦 DK 45 -7
Djibouti 吉布提 DJ 253 -5
Dominica Rep. 多米尼加共和国 DO 1890 -13
Ecuador 厄瓜多尔 EC 593 -13
Egypt 埃及 EG 20 -6
EI Salvador 萨尔瓦多 SV 503 -14
Estonia 爱沙尼亚 EE 372 -5
Ethiopia 埃塞俄比亚 ET 251 -5
Fiji 斐济 FJ 679 +4
Finland 芬兰 FI 358 -6
France 法国 FR 33 -8
French Guiana 法属圭亚那 GF 594 -12
Gabon 加蓬 GA 241 -7
Gambia 冈比亚 GM 220 -8
Georgia 格鲁吉亚 GE 995 0
Germany 德国 DE 49 -7
Ghana 加纳 GH 233 -8
Gibraltar 直布罗陀 GI 350 -8
Greece 希腊 GR 30 -6
Grenada 格林纳达 GD 1809 -14
Guam 关岛 GU 1671 +2
Guatemala 危地马拉 GT 502 -14
Guinea 几内亚 GN 224 -8
Guyana 圭亚那 GY 592 -11
Haiti 海地 HT 509 -13
Honduras 洪都拉斯 HN 504 -14
Hongkong 香港 HK 852 0
Hungary 匈牙利 HU 36 -7
Iceland 冰岛 IS 354 -9
India 印度 IN 91 -2.3
Indonesia 印度尼西亚 ID 62 -0.3
Iran 伊朗 IR 98 -4.3
Iraq 伊拉克 IQ 964 -5
Ireland 爱尔兰 IE 353 -4.3
Israel 以色列 IL 972 -6
Italy 意大利 IT 39 -7
Ivory Coast 科特迪瓦   225 -6
Jamaica 牙买加 JM 1876 -12
Japan 日本 JP 81 +1
Jordan 约旦 JO 962 -6
Kampuchea (Cambodia ) 柬埔寨 KH 855 -1
Kazakstan 哈萨克斯坦 KZ 327 -5
Kenya 肯尼亚 KE 254 -5
Korea 韩国 KR 82 +1
Kuwait 科威特 KW 965 -5
Kyrgyzstan 吉尔吉斯坦 KG 331 -5
Laos 老挝 LA 856 -1
Latvia 拉脱维亚 LV 371 -5
Lebanon 黎巴嫩 LB 961 -6
Lesotho 莱索托 LS 266 -6
Liberia 利比里亚 LR 231 -8
Libya 利比亚 LY 218 -6
Liechtenstein 列支敦士登 LI 423 -7
Lithuania 立陶宛 LT 370 -5
Luxembourg 卢森堡 LU 352 -7
Macao 澳门 MO 853 0
Madagascar 马达加斯加 MG 261 -5
Malawi 马拉维 MW 265 -6
Malaysia 马来西亚 MY 60 -0.5
Maldives 马尔代夫 MV 960 -7
Mali 马里 ML 223 -8
Malta 马耳他 MT 356 -7
Mariana Is 马里亚那群岛   1670 +1
Martinique 马提尼克   596 -12
Mauritius 毛里求斯 MU 230 -4
Mexico 墨西哥 MX 52 -15
Moldova, Republic of 摩尔多瓦 MD 373 -5
Monaco 摩纳哥 MC 377 -7
Mongolia 蒙古 MN 976 0
Montserrat Is 蒙特塞拉特岛 MS 1664 -12
Morocco 摩洛哥 MA 212 -6
Mozambique 莫桑比克 MZ 258 -6
Namibia 纳米比亚 NA 264 -7
Nauru 瑙鲁 NR 674 +4
Nepal 尼泊尔 NP 977 -2.3
Netheriands Antilles 荷属安的列斯   599 -12
Netherlands 荷兰 NL 31 -7
New Zealand 新西兰 NZ 64 +4
Nicaragua 尼加拉瓜 NI 505 -14
Niger 尼日尔 NE 227 -8
Nigeria 尼日利亚 NG 234 -7
North Korea 朝鲜 KP 850 +1
Norway 挪威 NO 47 -7
Oman 阿曼 OM 968 -4
Pakistan 巴基斯坦 PK 92 -2.3
Panama 巴拿马 PA 507 -13
Papua New Cuinea 巴布亚新几内亚 PG 675 +2
Paraguay 巴拉圭 PY 595 -12
Peru 秘鲁 PE 51 -13
Philippines 菲律宾 PH 63 0
Poland 波兰 PL 48 -7
French Polynesia 法属玻利尼西亚 PF 689 +3
Portugal 葡萄牙 PT 351 -8
Puerto Rico 波多黎各 PR 1787 -12
Qatar 卡塔尔 QA 974 -5
Reunion 留尼旺   262 -4
Romania 罗马尼亚 RO 40 -6
Russia 俄罗斯 RU 7 -5
Saint Lueia 圣卢西亚 LC 1758 -12
Saint Vincent 圣文森特岛 VC 1784 -12
Samoa Eastern 东萨摩亚(美)   684 -19
Samoa Western 西萨摩亚   685 -19
San Marino 圣马力诺 SM 378 -7
Sao Tome and Principe 圣多美和普林西比 ST 239 -8
Saudi Arabia 沙特阿拉伯 SA 966 -5
Senegal 塞内加尔 SN 221 -8
Seychelles 塞舌尔 SC 248 -4
Sierra Leone 塞拉利昂 SL 232 -8
Singapore 新加坡 SG 65 +0.3
Slovakia 斯洛伐克 SK 421 -7
Slovenia 斯洛文尼亚 SI 386 -7
Solomon Is 所罗门群岛 SB 677 +3
Somali 索马里 SO 252 -5
South Africa 南非 ZA 27 -6
Spain 西班牙 ES 34 -8
Sri Lanka 斯里兰卡 LK 94 0
St.Lucia 圣卢西亚 LC 1758 -12
St.Vincent 圣文森特 VC 1784 -12
Sudan 苏丹 SD 249 -6
Suriname 苏里南 SR 597 -11.3
Swaziland 斯威士兰 SZ 268 -6
Sweden 瑞典 SE 46 -7
Switzerland 瑞士 CH 41 -7
Syria 叙利亚 SY 963 -6
Taiwan 台湾省 TW 886 0
Tajikstan 塔吉克斯坦 TJ 992 -5
Tanzania 坦桑尼亚 TZ 255 -5
Thailand 泰国 TH 66 -1
Togo 多哥 TG 228 -8
Tonga 汤加 TO 676 +4
Trinidad and Tobago 特立尼达和多巴哥 TT 1809 -12
Tunisia 突尼斯 TN 216 -7
Turkey 土耳其 TR 90 -6
Turkmenistan 土库曼斯坦 TM 993 -5
Uganda 乌干达 UG 256 -5
Ukraine 乌克兰 UA 380 -5
United Arab Emirates 阿拉伯联合酋长国 AE 971 -4
United Kiongdom 英国 GB 44 -8
United States of America 美国 US 1 -13
Uruguay 乌拉圭 UY 598 -10.3
Uzbekistan 乌兹别克斯坦 UZ 233 -5
Venezuela 委内瑞拉 VE 58 -12.3
Vietnam 越南 VN 84 -1
Yemen 也门 YE 967 -5
Yugoslavia 南斯拉夫 YU 381 -7
Zimbabwe 津巴布韦 ZW 263 -6
Zaire 扎伊尔 ZR 243 -7
Zambia 赞比亚 ZM 260 -6

 

2011-08-31
发表者 Venus
暂无评论

Linux服务器远程自动异地备份

异地备份可以防止本地服务器硬盘故障以及攻击之类等,防止数据丢失。

在自动备份中,我们用到一个命令scp 用来远程复制文件,类似于ftp的作用。因为我们需要实现的是自动备份,scp是需要输入密码认证的,有一个交互过程,那么我们现在就必须通过密钥来认证,在备份过程需就无需输入密码了。

由于密钥认证是用本地的私钥去解锁目标服务器的公钥实现登陆。所以在本地机器上生成公钥和私钥。

[root@rhel6www ~]# ssh-keygen -t rsa          //生成密钥 -t rsa 加密类型
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):                   //直接回车
Enter passphrase (empty for no passphrase):                //直接回车 (为密钥密码验证)
Enter same passphrase again:                 //直接回车
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
8f:1f:3c:4b:4c:7c:1c:7d:53:02:87:c3:b8:e7:b4:da root@rhel6www
The key’s randomart image is:
+–[ RSA 2048]—-+
|           o.oo .|
|          . +o ..|
|           ……|
|         …o. ..|
|        S o+o.   |
|         * .o    |
|        . Bo     |
|         o.+E    |
|          o      |
+—————–+
[root@rhel6www ~]#

在/root/.ssh/下会生成id_rsa(私钥)和id_rsa.pub(公钥)。

将id_rsa.pub复制到远程计算机并更名为:/root/.ssh/authorized_keys

可以通过 ssh-copy-id -i id_rsa.pub root@172.17.1.121 复制到目标服务器,会自动创建authorized_keys文件并修改400权限。通过ssh-copy-id好处就是,当有多个客户端通过密钥方式连接同一个目标服务器的时候,此命令会将客户端生成的公钥追加到authorized_keys中,免去手动修改的麻烦。这里通过手动方式上传到目标服务器。

[root@rhel6www .ssh]# scp id_rsa.pub root@172.17.1.121:/root/.ssh/authorized_keys
root@172.17.1.121’s password:                //我们可以看到默认是需要密码认证的
id_rsa.pub                                   100%  395     0.4KB/s   00:00

[root@rhel5 ~]# chmod 400 authorized_keys             //在远程服务器中更改为400权限,否则还会提示需要密码的

[root@rhel6www .ssh]# touch b               //测试经过密钥认证后是否还需要密码
[root@rhel6www .ssh]# scp b root@172.17.1.121:/root/.ssh/c   //如果ssh运行在非22端口上,请在scp后加-P 指定端口号
b                                            100%    0     0.0KB/s   00:00
[root@rhel6www .ssh]#                //没有提示需要密码,说明密钥认证配置成功。

现在就开始写脚本,订制备份时间、文件等。自由发挥,比如说我之前有个自动备份数据库的脚本:


#!/bin/bash
 backdir="/mnt/sdb1/backup"
 dirname="$(date +%Y-%m-%d-%H-%M)"
 DIR="www db"
 for dir in $DIR
 do
 mkdir -p $backdir/$dirname/$dir
 done

# web backup
 www="www.tar.gz"
 tar zcfP $backdir/$dirname/www/$www /var/www

# database backup
 clubdb="club.tar.gz"
 cd /var/lib/mysql
 mysqldump --opt -u root -p --password=YOURDATABASEPASSWORD club > $backdir/$dirname/db/club.sql
 tar zcfP $backdir/$dirname/db/$clubdb $backdir/$dirname/db/club.sql
 $backdir/$dirname/db/$clubdb root@172.17.1.121:/root/test_backup
 rm -rf $backdir/$dirname/db/club.sql

添加任务计划:
#crontab -e
#24 15 * * * /back.sh