(7) 将tomcat HTTP连接器启动在80端口(jsvc使用详解)
让tomcat在80端口上运行
法一:
修改连接器的端口8080为80
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
然后以root身份重启tomcat即可
法二:
不修改连接器的端口,而是使用iptables转发端口流量,即将80/tcp端口的流量全部转发到8080/tcp
tomcat配置不需要做任何修改
当需要在需要添加两条iptables规则:10.0.0.121为tomcat服务所在地址
iptables -t nat -I PREROUTING -p tcp --dst 10.0.0.121 --dport 80 -j Redirect --to-ports 8080
iptables -t nat -I OUTPUT -p tcp --dst 10.0.0.121 --dport 80 -j Redirect --to-ports 8080
此法有个缺点:
为了显示真是的端口,tomcat需要重写URL。加入网址是www.example.com,若一个用户在其浏览器地址栏中输入http://www.example.com/,则依web应用程序的内容而定,tomcat会对重写该地址,且该用户会在自己的浏览器中看到http://www.example.com:8080/index.html的地址(即重定向后,浏览器上会显示真是的访问地址)
tomcat会认定请求来源于8080端口,因为她在8080端口上打开了web服务器连接器,因此无论如何发送重定向,他都会追加上端口号8080,按照如下方式修改连接器配置接口解决:
<Connector port="8080" protocol="HTTP/1.1" proxyPort=80
connectionTimeout="20000"
redirectPort="8443" />
如果安装的tomcat就是充当主页的功能,也可同时设置proxyName="hostname.example.com"
法三:
在80端口上通过Service Wrapper运行tomcat
这种方式是使用服务封装二进制文件(a service wrapper binary),这样在80端口上以非root用户运行tomcat
jsvs(Java Service的缩写)是tomcat的二进制发行版本身所带的服务封装器
在$CATALINA_HOME/bin/目录下找到commons-daemon-native.tar.gz压缩包,解压,编译
cd /applicaton/tomcat/bin/
tar xvf commons-daemon-native.tar.gz
cd /application/tomcat/bin/commons-daemon-1.1.0-native-src/unix
./configure --with-java=$JAVA_HOME
make
编译后,在当前目录下生成一个jsvc可执行文件,拷贝至/application/tomcat/bin目录下
cp -a jsvc /application/tomcat/bin
chmod 700 /application/tomcat/bin/jsvc
chown root:root /application/tomcat/bin/jsvc
useradd -d $CATALINA_HOME/temp -s /sbin/nologin -g nobody tomcat #也可使用其它虚拟用户
且除了对logs、temp、webapps、work目录(若打算使用Admin webapp,也可包含conf目录)具有读写权限外,几乎没有其它权限
chown -R tomcat $CATALINA_HOME/{logs,temp,webapps,work,conf}
ps -ef|grep catalina.startup #查找当前正在运行的tomcat
[root@docker121 ~]# ps -ef|grep catalina.startup
root 62790 1 0 Oct05 ? 00:11:16 /application/jdk/jre/bin/java -Djava.util.logging.config.file=/application/tomcat/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djdk.tls.ephemeralDHKeySize=2048 -Djava.protocol.handler.pkgs=org.apache.catalina.webresources -Dignore.endorsed.dirs= -classpath /application/tomcat/bin/bootstrap.jar:/application/tomcat/bin/tomcat-juli.jar -Dcatalina.base=/application/tomcat -Dcatalina.home=/application/tomcat -Djava.io.tmpdir=/application/tomcat/temp org.apache.catalina.startup.Bootstrap start
使用jsvc启动时,除了上述的选项外,还要加上自己的选项(提前设置好CATALINA_HOME和CATALINA_BASE环境变量):
/applicaton/tomcat/jsvc \
-user tomcat \
-home $JAVA_HOME \
-wait 10 -pidfile /var/run/jsvc.pid \
-outfile $CATALINA_HOME/logs/catalina.out \
-errfile $CATALINA_HOME/logs/catalina.out \
-Djava.util.logging.config.file=/application/tomcat/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djdk.tls.ephemeralDHKeySize=2048 -Djava.protocol.handler.pkgs=org.apache.catalina.webresources -Dignore.endorsed.dirs= -classpath /application/tomcat/bin/bootstrap.jar:/application/tomcat/bin/tomcat-juli.jar -Dcatalina.base=/application/tomcat -Dcatalina.home=/application/tomcat -Djava.io.tmpdir=/application/tomcat/temp org.apache.catalina.startup.Bootstrap start
一旦运行成功,要检查tomcat日志,并尝试对tomcat产生一个http请求
关闭jsvc:
jsvc -stop -pidfile /var/run/jsvc.pid org.apache.catalina.startup.Bootstrap
如果每次启停服务都是用上述方式,太过繁琐,可使用下面的脚本(放到/etc/init.d/下):
注意:该脚本不适用多实例,若用于多实例,根据自己的环境修改脚本中的变量
cat >> /etc/init.d/jsvc <<end
#!/bin/sh
#
# chkconfig: 35 95 95
# description: tomcat start/stop scripts
##############################################################################
# Small shell script to show how to start/stop Tomcat using jsvc
# If you want to have Tomcat running on port 80 please modify the server.xml file:
#
# <!-- Define a non-SSL HTTP/1.1 Connector on
port 80 -->
# <Connector
className="org.apache.catalina.connector.http.HttpConnector"
# port="80"
minProcessors="5" maxProcessors="75"
# enableLookups="true"
redirectPort="8443"
# acceptCount="10"
debug="0" connectionTimeout="60000"/>
##############################################################################
# Adapt the following lines to your configuration
JAVA_HOME=/application/jdk
CATALINA_HOME=/application/tomcat
DAEMON_HOME=/application/tomcat/bin
#TOMCAT_USER=tomcat
JVM_MODE=server
#multi instances 按需修改如下几个变量
TMP_DIR=/application/tomcat/temp
PID_FILE=/var/run/jsvc.pid
CATALINA_BASE=/applicaton/tomcat
CATALINA_OPTS=""
CLASSPATH=$JAVA_HOME/lib/tools.jar:$CATALINA_HOME/bin/commons-daemon.jar:$CATALINA_HOME/bin/bootstrap.jar
# we ignore the -user $TOMCAT_USER line
# and we added the -jvm $JVM_MODE line
# add -debug before the org.apache.catalina.startup.Bootstrap line if you want
to see debug infos
case "$1" in
start)
# Start Tomcat
#
$DAEMON_HOME/jsvc \
-jvm $JVM_MODE \
-home $JAVA_HOME \
-Dcatalina.home=$CATALINA_HOME \
-Dcatalina.base=$CATALINA_BASE \
-Djava.io.tmpdir=$TMP_DIR \
-wait 10 \
-pidfile $PID_FILE \
-outfile $CATALINA_HOME/logs/catalina.out \
-errfile $CATALINA_HOME/logs/catalina.err \
$CATALINA_OPTS \
-cp $CLASSPATH \
-verbose:gc \
org.apache.catalina.startup.Bootstrap
exit $?
;;
stop)
# Stop Tomcat
#
$DAEMON_HOME/jsvc \
-stop \
-pidfile $PID_FILE \
org.apache.catalina.startup.Bootstrap
exit $?
;;
*)
echo "Usage tomcat.sh start/stop"
exit 1;;
esac
end
然后编辑server.xml文件,修改连接器的端口为80
<Connector port="80"
protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"
/>
在次使用上述的指令或脚本启动即可
jsvc --help
用法:
jsvc [-options]
class [args...]
options:
-help | --help | -? 显示此帮助页面
-jvm <JVM name> 使用一个指定的Java Virtual Machine. 可用的JVMs: 'server'
-client 使用客户端Java Virtual Machine.
-server 使用服务端Java Virtual Machine.
-cp | -classpath <directories and
zip/jar files> 为service classes和 resouces设置搜索路径
-java-home | -home <directory> 设置JDK或JRE安装路径(或设置JAVA_HOME环境变量)
-version 显示当前java环境版本(检查-home和-jvm的正确性,暗含-nodetach)
-showversion 显示当前java环境版本(检查-home和-jvm的正确性) and continue execution.
-nodetach don't detach from parent process and
become a daemon
-debug
verbosely print debugging
information
-check
仅检查服务(暗含 -nodetach选项)
-user <user> 用于启动守护程序的用户(默认是当前用户)
-verbose[:class|gc|jni] enable verbose output
-cwd </full/path> set working directory to given location
(defaults to /)
-outfile </full/path/to/file> stdout的输出位置(默认/dev/null),使用'&2'模拟'1>&2'
-errfile </full/path/to/file> stderr的输出位置(默认/dev/null),使用'&1'模拟'2>&1'
-pidfile </full/path/to/file> 包含jsvc的pid文件的输出位置(默认/var/run/jsvc.pid)
-D<name>=<value> 设置java系统属性
-X<option> 设置虚拟机指定选项
-ea[:<packagename>...|:<classname>]
-enableassertions[:<packagename>...|:<classname>] enable assertions
-da[:<packagename>...|:<classname>]
-disableassertions[:<packagename>...|:<classname>] disable assertions
-esa | -enablesystemassertions enable system assertions
-dsa | -disablesystemassertions disable system assertions
-agentlib:<libname>[=<options>] load native agent library
<libname>, e.g. -agentlib:hprof
-agentpath:<pathname>[=<options>] load native agent library by full pathname
-javaagent:<jarpath>[=<options>] load Java programming language agent,
see java.lang.instrument
-procname <procname> 使用指定的进程名
-wait <waittime> 设置启动服务等待的秒数,waittime应为10的倍数(最小为10)
-restarts <maxrestarts> maximum automatic restarts (integer)
-1=infinite (default), 0=none,
1..(INT_MAX-1)=fixed restart count
-stop
使用-pidfile选项中提供的文件,停止服务
-keepstdin 禁止将stdin重定向至/dev/null
--add-modules=<module name> Java 9 --add-modules option. Passed as
it is to JVM
--module-path=<module path> Java 9 --module-path option. Passed as
it is to JVM
--upgrade-module-path=<module path> Java 9 --upgrade-module-path option. Passed
as it is to JVM
--add-reads=<module name> Java 9 --add-reads option. Passed as it
is to JVM
--add-exports=<module name> Java 9 --add-exports option. Passed as
it is to JVM
--add-opens=<module name> Java 9 --add-opens option. Passed as it
is to JVM
--limit-modules=<module name> Java 9 --limit-modules option. Passed as
it is to JVM
--patch-module=<module name> Java 9 --patch-module option. Passed as
it is to JVM
--illegal-access=<value> Java 9 --illegal-access option. Passed
as it is to JVM. Refer java help for possible values.
(7) 将tomcat HTTP连接器启动在80端口(jsvc使用详解)的更多相关文章
- apache无法正常启动,80端口被占用的解决方法
apache无法正常启动,80端口被占用的解决方法 网上的方法: 仔细查看提示: make_sock: could not bind to address 0.0.0.0:80 恍然大悟,计算机上安装 ...
- wamp安装后无法正常启动(80端口被占用)
关于wamp启动是80端口被占用的问题详解(win7系统下WAMP 80端口被Microsoft-HTTPAPI/2.0占用的解决办法) VS2010在更新了SP1后,会在开机时自动启动一个服务,占用 ...
- Nginx服务器中配置非80端口的端口转发方法详解
这篇文章主要介绍了Nginx服务器中配置非80端口的端口转发方法详解,文中使用到了Nginx中的proxy_pass配置项,需要的朋友可以参考下 nginx可以很方便的配置成反向代理服务器: 1 2 ...
- Winginx nginx 启动提示80端口被占用
第一步:查看80端口占用信息 win键+R运行命令:cmd-->netstat -aon|findstr "80" 2.结束任务 找到 pin=4272这个进程,将进程结束 ...
- Nginx无法启动,80端口被PID=4占用
在nginx启动后,error.log中总是显示 80 端口被占用. 通过netstat -ano发现,其被一个叫PID=4的系统服务占用. 网上大多数的方法是说通过regidit修改注册表的方式解决 ...
- 启动nginx 80端口被占用:tcp 0 0 127.0.0.1:80 127.0.0.1:34932 TIME_WAIT -
1.启动nginx命令./sbin/nginx 2.提示80端口被占用 nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already ...
- linux 下 nginx 启动服务器 80端口被占用问题
把80端口占用的程序杀死 sudo fuser -k 80/tcp rm -fr 文件 ----删除文件及文加下的所有文件 echo > filename ---清空文件的内容
- 如何在Eclipse或者Myeclipse中使用tomcat(配置tomcat,发布web项目)?(图文详解)(很实用)
前期博客 Eclipse里的Java EE视图在哪里?MyEclipse里的Java EE视图在哪里?MyEclipse里的MyEclipse Java Enterprise视图在哪里?(图文详解) ...
- nginx之旅(第一篇):nginx下载安装、nginx启动与关闭、nginx配置文件详解、nginx默认网站
一.nginx下载安装 版本nginx 1.15.5 系统环境centos7.5(本机ip192.168.199.228) 关闭selinux 和防火墙firewall 1.下载 wget http: ...
随机推荐
- cocos2d-html5基础
1 环境搭建 版本Cocos2d-html5-v2.2,tomcat7.0 配置tomcat,然后直接解压Cocos2d-html5-v2.2.zip,访问解压后的根目录的index.html就可以看 ...
- OLE/COM Object Viewer
OLE/COM Object Viewer摘AutoIt Help The "OLE/COM Object Viewer" is a very handy tool to get ...
- jqgrid 分级标题
参考地址:http://www.trirand.com/jqgridwiki/doku.php?id=wiki:groupingheadar Grouping of the header should ...
- BFS Codeforces Round #297 (Div. 2) D. Arthur and Walls
题目传送门 /* 题意:问最少替换'*'为'.',使得'.'连通的都是矩形 BFS:搜索想法很奇妙,先把'.'的入队,然后对于每个'.'八个方向寻找 在2*2的方格里,若只有一个是'*',那么它一定要 ...
- 转-sql之left join、right join、inner join的区别
left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录 right join(右联接) 返回包括右表中的所有记录和左表中联结字段相等的记录inner join(等值连接) 只 ...
- 关于在@Controller所返回的视图的css,js文件404问题
本人在使用layui打开一个请求后台的页面时,页面成功由controller重定向到了正确的位置,然而几乎所有的js文件和css文件都报404,并且确定这些css文件还有js文件的引入的路径都是正确的 ...
- toLocaleSting()
之前一直忽略了这一方法,直到前天的笔试题,两种方式实现如下功能... 1234567890→1,234,567,890 当时我的思路是这样的:1.字符串反转,插入逗号,再反转 2.求余数,将字符串一分 ...
- Aappcloud 调到二级页面黑屏
PartnerHead3.html 后面多了一个点
- vue在使用ajax获取数据时,两种方法(jquery和vue_resource)
@{ Layout = null;} <!DOCTYPE html> <html><head> <meta name="viewport ...
- 由浅入深一个Demo带你认识Restful风格的架构
java作为一门后端语言,其厉害之处在于web,大家比较熟知的各种网络应用,java都能做,那么在这个移动优先的时代,如何继续发挥java的强大之处呢? 通常是让java作为一个app的服务端,为ap ...