centos7.3中xampp整合apache+tomcat+php+jsp步骤与问题

导语:服务器环境为centos7.3,安装完xampp后,希望在它的上面整合tomcat,由apache来管理网站的请求,将访问请求按照不同的类型分配给php或tomcat的jsp来处理。整合完成后,一个网站可以同时打开php和jsp的网页。下面是整合步骤。

安装XAMPP

访问官网下载XAMPP,官网地址为:https://www.apachefriends.org/index.html。直接下载最新的版本就可以了,目前linux最新版本为:xampp-linux-x64-7.2.11-0-installer.run。

可以先下载到本机,然后上传到服务器。或者直接使用wget命令在服务器上下载。

下载完成安装XAMPP:

chmod 755 xampp-linux-x64-7.2.11-0-installer.run

./xampp-linux-x64-7.2.11-0-installer.run

安装很简单,安装完成后,服务器上就有apache、mysql、php、phpmyadmin了,下一步安装jdk和tomcat。

如果要做成自启动服务,请参考文章:在阿里云centos7 64位服务器上安装、配置、优化XAMPP(apache+Mysql+php7)如何在CENTOS 7.2中使用新的方式(systemctl)添加XAMPP服务使其开机启动

安装JDK

tomcat运行需要使用jdk,首先我们访问oracle官网下载jdk 8。下载rpm版本,在centos中使用rpm安装。

下载地址为:

https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

centos 7.3自带有openjdk,我们需要先卸载后再安装oracle的jdk 8。

查看java版本,可以看到Openjdk。

java -version

openjdk version "1.8.0_102"
OpenJDK Runtime Environment (build 1.8.0_102-b14)
OpenJDK 64-Bit Server VM (build 25.102-b14, mixed mode)

使用rpm来查看哪些java jdk是可以卸载的。

rpm -qa | grep java
 
tzdata-java-2016g-2.el7.noarch
javamail-1.4.6-8.el7.noarch
javassist-3.16.1-10.el7.noarch
java-1.7.0-openjdk-1.7.0.111-2.6.7.8.el7.x86_64
pki-base-java-10.3.3-10.el7.noarch
java-1.7.0-openjdk-headless-1.7.0.111-2.6.7.8.el7.x86_64
python-javapackages-3.4.1-11.el7.noarch
java-1.8.0-openjdk-headless-1.8.0.102-4.b14.el7.x86_64
java-1.8.0-openjdk-1.8.0.102-4.b14.el7.x86_64
nuxwdog-client-java-1.0.3-5.el7.x86_64
javapackages-tools-3.4.1-11.el7.noarch

使用下面的命令来卸载Openjdk,一共四个。

rpm -e --nodeps java-1.7.0-openjdk-1.7.0.111-2.6.7.8.el7.x86_64  
rpm -e --nodeps java-1.8.0-openjdk-1.8.0.102-4.b14.el7.x86_64
rpm -e --nodeps java-1.8.0-openjdk-headless-1.8.0.102-4.b14.el7.x86_64
rpm -e --nodeps java-1.7.0-openjdk-headless-1.7.0.111-2.6.7.8.el7.x86_64

然后再查看java版本会提示没有找到java了。

java -version
bash: java: command not found...

安装jdk 8,先给jdk-8u181-linux-x64.rpm赋予执行权限,然后再使用rpm安装。

chmod +x jdk-8u181-linux-x64.rpm   

rpm -ivh jdk-8u181-linux-x64.rpm

warning: jdk-8u181-linux-x64.rpm: Header V3 RSA/SHA256 Signature, key ID ec551f03: NOKEY
Preparing...                          ################################# [100%]
Updating / installing...
   1:jdk1.8-2000:1.8.0_181-fcs        ################################# [100%]
Unpacking JAR files...
        tools.jar...
        plugin.jar...
        javaws.jar...
        deploy.jar...
        rt.jar...
        jsse.jar...
        charsets.jar...
        localedata.jar...

jdk安装成功后,默认存放在/usr/java文件目录中,我们可以前往查看一下。

cd /usr/java

ls

default  jdk1.8.0_181-amd64  latest  

配置jdk的PATH,使用vi命令打开/etc/profile,在末尾添加以下内容。centos 7和centos 6 配置方法不一样,有点区别。

vi /etc/profile 
  • CentOS7
    #java environment
    export JAVA_HOME=/usr/java/jdk1.8.0_181-amd64
    export CLASSPATH=.:${JAVA_HOME}/jre/lib/rt.jar:${JAVA_HOME}/lib/dt.jar:${JAVA_HOME}/lib/tools.jar
    export PATH=$PATH:${JAVA_HOME}/bin
    
  • CentOS6
    #java environment
    export JAVA_HOME=/usr/java/jdk1.8.0_181-amd64
    export PATH=$JAVA_HOME/bin:$PATH
    export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tool.jar  
    

如果需要查看centos的版本,使用下面的命令:

cat /etc/redhat-release

CentOS Linux release 7.3.1611 (Core)

path配置文件是/etc/profile,可以使用vi直接编辑它,可以看到刚刚加的java路径放在文件的末尾。

设置完后,如果不重启机器的话,需要使用下面的命令来使配置生效。

source /etc/profile

查看PATH是否生效。

echo $PATH

/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/openssh-7.5p1/bin:/root/bin:/usr/java/jdk1.8.0_181-amd64/bin 

安装tomcat

访问tomcat的官网下载tomcat,下载网址:

https://tomcat.apache.org/download-90.cgi

这里下载的是9.0版本的gz压缩包,直接将压缩包文件放在/opt/目录下面,然后解压。

tar -zxv -f apache-tomcat-9.0.12.tar.gz

删除压缩包。

rm -rf apache-tomcat-9.0.12.tar.gz

然后将目录apache-tomcat-9.0.12改名为tomcat。

mv apache-tomcat-9.0.12 tomcat

使用vi命令打开/etc/profile,在文件末尾添加tomcat的PATH。

vi /etc/profile
 
#tomcat  
export CATALINA_HOME=/opt/tomcat
export CATALINA_BASE=/opt/tomcat
export PATH=$PATH:${CATALINA_HOME}/bin

使用source命令使配置生效,使用echo查看是否生效。

source /etc/profile

echo $PATH

打开tomcat安装目录下的/opt/tomcat/conf/server.xml文件,(大约在69行处)将8080端口的标签中设置成 URIEncoding=”UTF-8″。

cd /opt/tomcat/conf

vi server.xml

修改后的内容片段。

    <Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443"
               URIEncoding="UTF-8" />
    <!-- A "Connector" using the shared thread pool-->
    <!--
    <Connector executor="tomcatThreadPool"
               port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />
    -->

启动tomcat

tomcat的启动文件为startup.sh,停止文件为shutdown.sh。

cd /opt/tomcat/bin

startup.sh

Using CATALINA_BASE:   /opt/tomcat
Using CATALINA_HOME:   /opt/tomcat
Using CATALINA_TMPDIR: /opt/tomcat/temp
Using JRE_HOME:        /usr/java/jdk1.8.0_181-amd64
Using CLASSPATH:       /opt/tomcat/bin/bootstrap.jar:/opt/tomcat/bin/tomcat-juli.jar
Tomcat started.

如果启动失败,那么请检查是否有一个系统自带的tomcat在运行了,杀掉进程,然后再执行启动文件。

查看Tomcat。

ps -ef|grep java

root      1995     1  0 Sep12 ?        00:38:19 /usr/bin/java -Djava.util.logging.config.file=/opt/tomcat/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djdk.tls.ephemeralDHKeySize=2048 -Djava.protocol.handler.pkgs=org.apache.catalina.webresources -Dorg.apache.catalina.security.SecurityListener.UMASK=0027 -Dignore.endorsed.dirs= -classpath /opt/tomcat/bin/bootstrap.jar:/opt/tomcat/bin/tomcat-juli.jar -Dcatalina.base=/opt/tomcat -Dcatalina.home=/opt/tomcat -Djava.io.tmpdir=/opt/tomcat/temp org.apache.catalina.startup.Bootstrap start
root     18812 17494  0 13:14 pts/0    00:00:00 grep --color=auto java

如果你想直接直接杀死Tomcat进程(进程号: 7010),可以使用kill命令

kill -9 1995

然后再启动。

startup.sh

如果无法打开tomcat默认页面,提示无法访问,那么需要打开防火墙的8080端口。centos7.3自带的防火墙是firewall,执行以下命令。

firewall-cmd --permanent --zone=public --add-port=8080/tcp

或者直接打开/etc/firewalld/zones/public.xml配置文件修改。

vi /etc/firewalld/zones/public.xml

重启防火墙。

firewall-cmd --reload

添加tomcat自启动服务

centos 7.3使用systemctl来管理服务。由于centos 7.3可能会自带tomcat,我们需要将自带的服务关闭,然后添加自己的tomcat9。如果不关闭,那么自带的tomcat会抢占端口,这样的话安装的tomcat9就启动不起来了。

查看是否有tomcat服务文件。

cd /lib/systemd/system/

ls /lib/systemd/system/tomcat.service

查看一下有没有tomcat的包。

rpm -qa | grep tomcat

列出所有服务。

systemctl list-unit-files --type=service

禁止自带的tomcat服务。

systemctl disable tomcat.service

systemctl命令合集。

  • systemctl enable tomcat.service
    
  • systemctl start tomcat.service
    
  • systemctl stop tomcat.service
    
  • systemctl status tomcat.service
    

创建自己的tomcat9服务,先切换到/lib/systemd/system/,然后创建tomcat9.service文件,输入下面的内容。

cd /lib/systemd/system/

vi /lib/systemd/system/tomcat9.service

tomcat9.service文件的内容

[Unit]
Description=Tomcat 9
After=network.target

[Service]
Type=forking
ExecStart=/opt/tomcat/bin/startup.sh
ExecStop=/opt/tomcat/bin/shutdown.sh
PrivateTmp=true

[Install]
WantedBy=multi-user.target

添加tomcat9服务。

systemctl enable tomcat9.service

启动tomcat9服务。

systemctl start tomcat9.service

查看tomcat是否启动。

ps -ef|grep java

安装Tomcat Connectors (mod_jk)

为xampp中的apache安装Tomcat Connectors控制器,登录网址下载控制器源码包:https://tomcat.apache.org/download-connectors.cgi。

cd /opt

wget http://mirrors.hust.edu.cn/apache/tomcat/tomcat-connectors/jk/tomcat-connectors-1.2.44-src.tar.gz

解压源码包。

tar -xzvf tomcat-connectors-1.2.44-src.tar.gz

切换到源代码编译目录。

cd /opt/tomcat-connectors-1.2.44-src/native

configure配置安装脚本。

./configure --with-apxs=/opt/lampp/bin/apxs


configure: tokens in APXSLDFLAGS have been prefixed with '-Wl,'
checking that generated files are newer than configure... done
configure: creating ./config.status
config.status: creating Makefile
config.status: creating apache-2.0/Makefile
config.status: creating apache-2.0/Makefile.apxs
config.status: creating common/Makefile
config.status: creating common/list.mk
config.status: creating common/jk_types.h
config.status: creating common/config.h
config.status: executing depfiles commands
config.status: executing libtool commands

如果不知道apxs位置,可以使用下面的命令查看。

whereis apxs

apxs: /opt/lampp/bin/apxs

configure完成后,make代码。

make

make[1]: Leaving directory `/opt/tomcat-connectors-1.2.44-src/native'
target="all"; \
list='common apache-2.0'; \
for i in $list; do \
    echo "Making $target in $i"; \
    if test "$i" != "."; then \
       (cd $i && make $target) || exit 1; \
    fi; \
done;
Making all in common
make[1]: Entering directory `/opt/tomcat-connectors-1.2.44-src/native/common'
make[1]: Nothing to be done for `all'.
make[1]: Leaving directory `/opt/tomcat-connectors-1.2.44-src/native/common'
Making all in apache-2.0
make[1]: Entering directory `/opt/tomcat-connectors-1.2.44-src/native/apache-2.0'
../scripts/build/instdso.sh SH_LIBTOOL='/opt/lampp/build/libtool --silent' mod_jk.la `pwd`
/opt/lampp/build/libtool --silent --mode=install cp mod_jk.la /opt/tomcat-connectors-1.2.44-src/native/apache-2.0/
libtool: install: warning: remember to run `libtool --finish /opt/lampp/modules'
make[1]: Leaving directory `/opt/tomcat-connectors-1.2.44-src/native/apache-2.0'

make完成后,再安装编译代码。

make install


Libraries have been installed in:
   /opt/lampp/modules

If you ever happen to want to link against installed libraries
in a given directory, LIBDIR, you must either use libtool, and
specify the full pathname of the library, or use the `-LLIBDIR'
flag during linking and do at least one of the following:
   - add LIBDIR to the `LD_LIBRARY_PATH' environment variable
     during execution
   - add LIBDIR to the `LD_RUN_PATH' environment variable
     during linking
   - use the `-Wl,-rpath -Wl,LIBDIR' linker flag
   - have your system administrator add LIBDIR to `/etc/ld.so.conf'

See any operating system documentation about shared libraries for
more information, such as the ld(1) and ld.so(8) manual pages.
----------------------------------------------------------------------
chmod 755 /opt/lampp/modules/mod_jk.so

Please be sure to arrange /opt/lampp/conf/httpd.conf...

make[1]: Leaving directory `/opt/tomcat-connectors-1.2.44-src/native/apache-2.0'
make[1]: Entering directory `/opt/tomcat-connectors-1.2.44-src/native'
make[2]: Entering directory `/opt/tomcat-connectors-1.2.44-src/native'
make[2]: Nothing to be done for `install-exec-am'.
make[2]: Nothing to be done for `install-data-am'.
make[2]: Leaving directory `/opt/tomcat-connectors-1.2.44-src/native'
make[1]: Leaving directory `/opt/tomcat-connectors-1.2.44-src/native'

mod_jk.so安装在/opt/lampp/modules/目录下面,需要赋予755权限。

配置apache和tomcat

上面所有需要的安装完成后,我们需要配置各种配置文件,使apache能够代理tomcat的服务请求。

这里将8080当作apache的监听端口,所以tomcat的监听端口改为8081。如果直接使用80端口,无需修改tomcat的监听端口。

将tomcat的监听端口改为8081。

vi /opt/tomcat/conf/server.xml

    <Connector port="8081" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443"
               URIEncoding="UTF-8" />
    <!-- A "Connector" using the shared thread pool-->
    <!--
    <Connector executor="tomcatThreadPool"
               port="8081" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />
    -->

重启tomcat。

systemctl stop tomcat9.service
systemctl start tomcat9.service

在/opt/lampp/etc下新建文件worker.properties,内容为:

vi /opt/lampp/etc/worker.properties

worker.list=ajp13
worker.ajp13.port=8009
worker.ajp13.host=localhost
worker.ajp13.type=ajp13
worker.ajp13.lbfactor=1

在/opt/lampp/etc/extra/下新建文件mod_jk.conf,内容包含了刚刚新建的worker.properties文件,内容为:

vi /opt/lampp/etc/extra/mod_jk.conf

LoadModule jk_module /opt/lampp/modules/mod_jk.so
JkWorkersFile /opt/lampp/etc/worker.properties
JkLogFile /opt/tomcat/logs/mod_jk.log
JkLogLevel info
JkshmFile /opt/tomcat/logs/mod_jk.shm
JkLogStampFormat "[%a %b %d %H:%M:%S %Y] "
JkRequestLogFormat "%w %V %T"

JkAutoAlias /opt/tomcat/webapps
JkMount /servlet/* ajp13
JkMount /*.jsp ajp13
JkMount /*.do ajp13
JkMount /test/*.jsp ajp13

JkAutoAlias以下部分其实可以放在vhost.conf文件中为每个网站配置不同的目录路由。

编辑httpd.conf,在文件末尾添加mod_jk.conf文件,重启apache后生效。

vi /opt/lampp/etc/httpd.conf

Include /opt/lampp/etc/extra/mod_jk.conf

重启lampp服务,也就是重启apache、mysql、php。

systemctl restart lampp.service

我们可以编辑/opt/lampp/etc/extra/httpd-vhosts.conf,使用JkMount为每个虚拟主机指定不同的tomcat目录路由。

<VirtualHost *:8080>
    DocumentRoot "/opt/lampp/htdocs/test"

    Header set Access-Control-Allow-Origin "http://134.166.70.6"

    DirectoryIndex index.php index.html index.html.var


    JkAutoAlias /opt/tomcat/webapps
    JkMount /*WEB-INF ajp13
    JkMount /*.jsp ajp13
    JkMount /servlet/* ajp13
    JkMount /*.do ajp13
    JkMount /*.action ajp13
    JkMount /test/* ajp13
    JkMount /tom/* ajp13

    ErrorLog "logs/test-error_log"
    CustomLog "|/opt/lampp/bin/rotatelogs  /opt/lampp/logs/test-access_log_%Y-%m-%d  86400 480" common
</VirtualHost>

结束

xampp整合tomcat的过程比较长,希望本篇文章对大家的工作有所帮助。注意,这里另外创建了一个tomcat9.service,你也可以直接在tomcat.service上修改,这样tomcat服务启动的也就是你自己安装的tomcat9了。

发表评论

邮箱地址不会被公开。 必填项已用*标注