内容简介:之前写过 tomcat 单机多实例,最后解决 80 端口访问用的是 iptables 转发;第三轮投产前,客户做了迁移和扩容。重启后,不但转发策略失效,重新执行转发命令后仍旧不能访问 80。后来我还发现是彻底关闭了防火墙。后来经研究,通过打开防火墙,配置自定义防火墙函数保存iptables策略,解决了 iptables 转发重启失效的问题;方案也提交了客户。方案稍后整理发布。第三轮投产时,通过和一线沟通,得知客户这边的策略是生产一律关闭防火墙。so strange!但是,还得想办法不是?总不能说这个系统必须
前言
之前写过 tomcat 单机多实例,最后解决 80 端口访问用的是 iptables 转发;
第三轮投产前,客户做了迁移和扩容。重启后,不但转发策略失效,重新执行转发命令后仍旧不能访问 80。后来我还发现是彻底关闭了防火墙。后来经研究,通过打开防火墙,配置自定义防火墙函数保存iptables策略,解决了 iptables 转发重启失效的问题;方案也提交了客户。方案稍后整理发布。
第三轮投产时,通过和一线沟通,得知客户这边的策略是生产一律关闭防火墙。so strange!但是,还得想办法不是?总不能说这个系统必须得开防火墙吧?通过研究实验和请教大神,最终搞定。整理如下。
# 进入 docker 容器启动tomcat root@40f7130d7832:/usr/local/tomcat/bin# ./startup.sh # get tomcat对应 java 进程: root@40f7130d7832:/usr/local/tomcat/bin# ps -ef | grep java # 添加kch用户 root@40f7130d7832:/usr/local# # groupadd kch && useradd -d /kch -g kch -m kch && passwd kch # 更改tomcat属主为kch root@40f7130d7832:/usr/local# chown -R kch.kch tomcat # 赋予 tomcat对应java进程 u+s 权限 (进程只能是exe,不能是脚本):普通用户访问时,临时使进程具有root权限可以绑定80端口 root@40f7130d7832:/usr/local# chmod u+s /docker-java-home/jre/bin/java
实验如下
本能就用官方 tomcat7 镜像。没有的自行 pull 一个
docker pull tomcat:7.0
默认是 8080 端口的,启动命令
docker run --name w1 -it -p 8080:8080 tomcat:7.0 /bin/bash
这里我们需要绑定 80 端口,所以启动命令见下文,且需要修订 server.xml,把 tomcat 的端口由 8080 改为 80;
启动 Tomcat 镜像
ChinaDreams:workspace kangcunhua$ docker images REPOSITORY TAG IMAGE ID CREATED SIZE .... tomcat 7.0 3402a4bb8ae6 4 months ago 357MB .... ChinaDreams:workspace kangcunhua$ docker run --name www -it -p 80:80 tomcat:7.0 /bin/bash root@40f7130d7832:/usr/local/tomcat# cd bin root@40f7130d7832:/usr/local/tomcat/bin# ./startup.sh root@40f7130d7832:/usr/local/tomcat/bin# ps -ef | grep java root 12 1 37 15:12 pts/0 00:00:05 /docker-java-home/jre/bin/java -Djava.util.logging.config.file=/usr/local/tomcat/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djdk.tls.ephemeralDHKeySize=2048 -Djava.endorsed.dirs=/usr/local/tomcat/endorsed -classpath /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar -Dcatalina.base=/usr/local/tomcat -Dcatalina.home=/usr/local/tomcat -Djava.io.tmpdir=/usr/local/tomcat/temp org.apache.catalina.startup.Bootstrap start root 56 1 0 15:12 pts/0 00:00:00 grep java root@40f7130d7832:/usr/local/tomcat/bin# curl localhost:8080 <!DOCTYPE html> ... root@40f7130d7832:/usr/local/tomcat/bin#
get 到 tomcat 的进程(exe):/docker-java-home/jre/bin/java。注:这里查询记下来的,必须是进程(exe),不能是脚本。后续有用;
修改 server.xml
ChinaDreams:workspace kangcunhua$ docker cp www:/usr/local/tomcat/conf/server.xml . ChinaDreams:workspace kangcunhua$ vi server.xml ChinaDreams:workspace kangcunhua$ docker cp server.xml www:/usr/local/tomcat/conf/
将默认的 8080 改成 80
找到
<Connector port="8080"
修改为
<Connector port="80"
新建 prms 用户
对应容器已新建 prms 用户
root@40f7130d7832:/usr/local# # groupadd kch && useradd -d /kch -g kch -m kch root@40f7130d7832:/usr/local# # passwd kch
更改 tomcat 属主
root@40f7130d7832:/usr/local# ls -la drwxr-sr-x 14 root staff 4096 Dec 18 15:12 tomcat root@40f7130d7832:/usr/local# chown -R kch.kch tomcat root@40f7130d7832:/usr/local# ls -la drwxr-sr-x 20 kch kch 4096 Dec 18 15:22 tomcat root@40f7130d7832:/usr/local#
启动
发现可以正常启动,但是不能访问80端口;
$ ./startup.sh ... Tomcat started. $ curl localhost curl: (7) Failed to connect to localhost port 80: Connection refused $ ./shutdown.sh
修订 java 的属主
root@40f7130d7832:/usr/local# ls -la /docker-java-home/jre/bin/java -rwxr-xr-x 1 root root 6408 May 19 2017 /docker-java-home/jre/bin/java root@40f7130d7832:/usr/local# chmod u+s /docker-java-home/jre/bin/java root@40f7130d7832:/usr/local# ls -la /docker-java-home/jre/bin/java -rwsr-xr-x 1 root root 6408 May 19 2017 /docker-java-home/jre/bin/java
启动 tomcat
正常启动,且可以访问 80 端口
通过浏览器 http://localhost也可以访问 ,看到tomcat首页;
root@40f7130d7832:/usr/local# su kch $ ./startup.sh Using CATALINA_BASE: /usr/local/tomcat Using CATALINA_HOME: /usr/local/tomcat Using CATALINA_TMPDIR: /usr/local/tomcat/temp Using JRE_HOME: /docker-java-home/jre Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar Tomcat started. $ curl localhost <!DOCTYPE html> ... $
收尾
提交镜像
docker commit www tomcat-bind80:7.0
提交 dockerhub
ChinaDreams:workspace kangcunhua$ docker images REPOSITORY TAG IMAGE ID CREATED SIZE tomcat-bind80 7.0 c6e1013adaf9 6 seconds ago 374MB ChinaDreams:workspace kangcunhua$ docker tag c6e1013adaf9 aninputforce/tomcat7-bind80:latest ChinaDreams:workspace kangcunhua$ docker images REPOSITORY TAG IMAGE ID CREATED SIZE tomcat-bind80 7.0 c6e1013adaf9 2 minutes ago 374MB aninputforce/tomcat7-bind80 latest c6e1013adaf9 2 minutes ago 374MB ChinaDreams:workspace kangcunhua$ docker push aninputforce/tomcat7-bind80
使用镜像
ChinaDreams:workspace kangcunhua$ docker pull aninputforce/tomcat7-bind80 ChinaDreams:workspace kangcunhua$ docker run --name www -it -p 80:80 aninputforce/tomcat7-bind80 /bin/bash root@ff63d8ac4776:/usr/local/tomcat# su kch $ pwd /usr/local/tomcat $ cd 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: /docker-java-home/jre Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar Tomcat started. $ curl localhost <!DOCTYPE html> ....
参考链接
Is there a way for non-root processes to bind to “privileged” ports on Linux?请添加链接描述
Bye
这几篇笔记写完。对 linux 的认识更加深刻了。不过对于80端口的绑定,被真实商业环境折磨许久,研究分析实现了种种可能。后续或许会追加笔记为“茴香豆系列” :)
51Reboot K8s专场分享
时间:2019年1月4号21:00-22:00
分享讲师:GY 老师
10年一线软件开发经验,先后经历了传统安全公司,以及多家互联网公司;在安全开发方面,曾开发过 Linux 防火墙、web 应用防火墙、Linux 安全内核加固,基于大流量的 Web 安全威胁分析等项目;在互联网公司工作时,曾基于 DPDK 高性能网络开发框架开发过基于全流量的网络流量分析平台和基于 Sflow 网络流量分析平台,基于 Golang 开发 SmartDNS 等;开发语言也是从C -> python -> golang 的转变过程?现从事基于 K8S 和 Docker在私有云平台建设方面的研发工作;具备丰富的Linux系统开发经验、网络开发经验以及项目管理经验;目前开发工作 90+% 都在用 Golang,Golang 是一门简洁、高效、强大且灵活的编程语言。
参与方式:添加小助手wechat:18310139238,备注:公开课,拉入直播分享群与老师互动
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- 硒 – 无法在45000毫秒内绑定到锁定端口7054
- Netty源码分析--Channel注册&绑定端口(下)(七)
- Nginx+Tomcat实现80端口转发8080端口
- 猎鹰网络安全工具新功能:主机端口扫描可以自定义端口范围
- nginx代理其他端口到80端口-低调小熊猫的技术小黑屋
- 浅析Linux网络端口
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
CSS权威指南(第三版)
[美] Eric A.Meyer / 侯妍、尹志忠 / 中国电力出版社 / 2007-10 / 58.00
你是否既想获得丰富复杂的网页样式,同时又想节省时间和精力?本书为你展示了如何遵循CSS最新规范(CSS2和CSS2.1)将层叠样式表的方方面面应用于实践。 通过本书提供的诸多示例,你将了解如何做到仅在一处建立样式表就能创建或修改整个网站的外观,以及如何得到HTML力不能及的更丰富的表现效果。 资深CSS专家Eric A.Meyer。利用他独有的睿智和丰富的经验对属性、标记、标记属性和实......一起来看看 《CSS权威指南(第三版)》 这本书的介绍吧!