idea使用tomcat启动webapp报404

使用工具idea创建一个maven的webapp项目,然后配置tomcat环境,点击tomcat运行,浏览器打开默认网页,但是报了404。我们知道404代码访问路径有问题,找到对应的资源,这种情况需要检查一下环境:

一、看项目代码结构

未分类

里面的out文件夹和target文件夹是自动生成的

二、检查一下artifact

未分类

上面的META-INF是自动生成不用管,但是新增artifact选中的是war exploded

三、检查一下module设置

未分类

四、url中的路径应该跟context配置保持一致

1、url中的路径

未分类

2、context路径设置

未分类

以上设置就是最简洁的设置检查方式,最常见的问题是只修改了url的路径没有修改context的路径,因此报了404。

eclipse配置Tomcat服务器server locations的方法

我在使用eclipse配置Tomcat服务器的时候发现,默认情况下Tocmat把我们部署的项目放在了workspaces下面,而不是像Myeclipse默认的那样放在tomcat的安装路径下

未分类

从上图1中可以看到,Server Locations配置是灰色的,无法去修改,当然,这里我已经勾选成了Use Tomcat installation,即部署在Tomcat安装目录下。eclipse默认是勾选的第一项,即Use workspace metadata。那么,怎么去修改该配置呢?

未分类

如上图2所示,想要Tomcat的Server配置可以修改,那么首先将server下面部署的所有项目都先remove掉,然后再在server上右键鼠标,选择Clean,clean完以后,再次双击server进入配置,即可发现配置可修改。

未分类

如上图3所示,配置已经可以修改了。

有时候,eclipse启动tomcat的时候会出现:

WARNING: [SetPropertiesRule]{Server/Service/Engine/Host/Context} Setting property 'source' to 'org.eclipse.jst.jee.server:firstProject' did not find a matching property

这样的问题,我也遇到过这样的报错信息。出现这个问题,可能是由于没有勾选server options下的Publish module contexts to separate XML files,我是通过勾选了该配置项解决了这个问题。

最后,提醒下,修改了配置以后,别忘了保存修改。

Java Tomcat Demo配置

简单写了个 Java MVC + Tomcat Demo 和 SpringBoot Demo 配置,小demo仅仅是用来测试的,各家还得根据自己公司的调调来配置。

未分类

高级任务-Deploy前置任务

在宿主机未检出代码前的前置任务,常为安装依赖、配置环境变量等

高级任务-Deploy后置任务

# 打包编译
${MVN_HOME}/bin/mvn clean package -Dmaven.test.skip=true
cp target/walle-web.war .

高级任务-Release前置任务

# 停服
${TOMCAT_HOME}/bin/shutdown.sh

高级任务-Release后置任务

# tomcat 更新服务
cp ${WEBROOT}/walle-web.war ${TOMCAT_HOME}/webapps/
# 服务启动
${TOMCAT_HOME}/bin/startup.sh

未分类

SpringBoot的部署的方式有多种,有java -jar xx.jar,也有配置Tomcat部署方式,结合热部署、配置中心,以及ansible等方案。

Tomcat下的SSL证书安装方法

一、证书导入

导入中级证书: keytool -import -alias intermediate -keystore c:server.jks -chinasslcrt –file c:intermediate.crt 提示“认证已添加至keystore中”则导入成功。

导入交叉证书: keytool -import -alias cross -keystore c:server.jks -chinasslcrt -file c:chain.crt 提示“认证已添加至keystore中” 则导入成功。

导入服务器SSL证书: keytool -import -alias mykey -keystore c:server.jks -chinasslcrt -file c:server.crt 输入密码后 提示:“认证回复已安装在 keystore中”说明导入成功。

二、修改配置文件server.xml 将已正确导入认证回复的server.jks文件复制到tomcat安装目录下的conf目用文本编辑器打开Server.xml并更新以下内容

maxThreads="150" SSLEnabled="true" scheme="https" secure="true"

clientAuth="false" sslProtocol="TLS" keystoreFile="D:/jcy/Tomcat7/conf/server.jks"?keystorePass="123456" />

下面为配置文件参数说明: port=”443″?SSL访问端口号为443 keystoreFile 私钥库文件 server.jks keystorePass私钥库密码 123456

对于Tomcat服务器,如果需要支持使用https访问,可以将服务器证书生成以后,配置server.xml文件,开放https访问方式。但有些时候,可能我们需要将整站或者一些特定的URL限制为只能使用https方式进行访问,那么需要在WEB应用的web.xml文件中进行进一步的配置。 在 tomcat /conf/web.xml 中的 后面加上下面代码:

需要重新启动tomcat,命令如下:

service tomcat stop

service tomcat start

备注:

一:Tomcat 默认http端口是8080,https一般默认443端口。修改默认网站端口方法,编辑server.xml修改下面代码:

connectionTimeout="20000"??URIEncoding="UTF-8"

redirectPort="443" />

二:“F5负载均衡产品设备的面板中健康检测还是应该是8080 而不是 443 否则认为不对,导致不能外网访问“,??.jks文件安装所以不需要加keystoreType=”PKCS12″这个代码。

server.xml配置文件参考模板:

type="org.apache.catalina.UserDatabase"

description="User database that can be updated and saved"

factory="org.apache.catalina.users.MemoryUserDatabaseFactory"

pathname="conf/tomcat-users.xml" />

connectionTimeout="20000"??URIEncoding="UTF-8"

redirectPort="443" />

maxThreads="150" SSLEnabled="true" scheme="https" secure="true"

clientAuth="false" sslProtocol="TLS" keystoreFile="D:/jcy/Tomcat7/conf/server.jks" keystoreType="PKCS12" keystorePass="123456" />

resourceName="UserDatabase"/>

unpackWARs="true" >

prefix="localhost_access_log." suffix=".txt"

pattern="%h %l %u %t "%r" %s %b" />

以上由安信SSL证书整理发出,欢迎大家实践测试!

tomcat 修改部署web项目的路径

tomcat 发布自己项目操作实际很简单,修改路径是为了方便我们发布项目,不需要频繁操作。

1. 首先当然是去tomcat官网选择你需要的版本下载

https://link.juejin.im/?target=http%3A%2F%2Ftomcat.apache.org%2Fdownload-70.cgi

2. 下载需要的JDK

https://link.juejin.im/?target=https%3A%2F%2Fwww.oracle.com%2Ftechnetwork%2Fjava%2Fjavase%2Fdownloads%2Findex.html

安装之后设置环境变量, JAVA_HOME = “你安装的java地址”

例如: JAVA_HOME="C:Program FilesJavajdk-10.0.1"

3. 解压tomcat,并且配置环境变量

CATALINA_HOME = “安装的tomcat地址”

例如: CATALINA_HOME="F:Program Files (x86)apache-tomcat-9.0.14"

4. 找到 tomcat下面的conf文件夹下面的server.xml

找到节点里面添加配置

<Context docBase="G:webapptest" reloadable="true" path="/test" />

docBase:  你电脑指定的web项目的路径

reloadable=”true” 相关文件改变的时候会重新加载web app

path: 虚拟文件目录,可以为空,配置的话访问地址就要加上它再访问

5. 找到 tomcat 下面的 bin 文件夹里面的 startup.bat 启动tomcat服务

输入 localhost:8080/test 即可看到你的web项目

6. 修改tomcat的端口号

找到server.xml 中的 节点的port=8080修改成你需要的端口,记得不要冲突

例:<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
  • netstat -ano 命令,列出所有端口情况,查看是否有冲突的端口被占用
  • netstat -aon|findstr “8080” 具体被占用8080端口对应的PID
  • tasklist|findstr “端口占用的PID” 就知道哪个进程占用了8080端口

git设置ssh访问

生成新的ssh密钥

进入根目录的.ssh里,没有也行,生成文件名时会生成目录的

cd ~/.ssh

生成文件名和文件位置

ssh-keygen -t rsa -C "github" -f id_rsa_github

指定生成的文件名是id_rsa_github
指定备注是github
密码一般为空即可
此时的~/.ssh目录下会有:

id_rsa_github 私钥文件

id_rsa_github.pub 公钥文件
再把key加到ssh-agent里

Start the ssh-agent in the background.

eval "$(ssh-agent -s)"
Agent pid 59566

If you‘re using macOS Sierra 10.12.2 or later, you will need to modify your ~/.ssh/config file to automatically load keys into the ssh-agent and store passphrases in your keychain.

Host *
AddKeysToAgent yes
UseKeychain yes
IdentityFile ~/.ssh/id_rsa

ssh-add -K ~/.ssh/id_rsa

再把.pub里的加到github的ssh key里
注意:生成的文件名是什么,加到config里的file名字就用自己生成的,ssh-add的也是

此时git clone git://地址 就OK了

参考地址
https://help.github.com/articles/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent/#generating-a-new-ssh-key

Linux 防火墙 阻止ssh暴力测试

Fedora CentOS 系统下有效

安装fail2ban服务

dnf install fail2ban -y

设置开机启动

systemctl enable fail2ban

启动服务

systemctl start fail2ban

编辑文件

vim /etc/fail2ban/jail.conf

...
...
...

[ssh]
enabled = true
filter   = sshd
logpath = /var/log/secure
maxretry = 1
findtime = 300
bantime = 86400
ignoreip = 192.168.1.1/24,192.168.0.1/24

重启fail2ban

systemctl restart fail2ban

解决ssh无法连接远程Ubuntu,Uuntu安装ssh-server

ssh无法连接Ubuntu原因:

Ubuntu安装完成默认情况下,只安装了ssh-client,也就是说你可以在该Ubuntu下用ssh连接其它服务器,但是没有安装ssh-server,因此你无法连接到此Ubuntu上,解决办法就是安装ssh-server。

一、安装ssh

命令:

sudo apt-get install openssh-server -y

二、查看ssh服务是否启动

命令:

sudo ps -e |grep ssh

#如果显示有sshd 这一项说明,说明ssh已经启动成功,到此结束。那么你可以远程连接ssh了。

#如果没有sshd、只有ssh-agent,说明ssh启动失败,需要配置,继续完成后续步骤。

三、启动ssh服务

sudo service ssh start  或 /etc/init.d/ssh restart

命令执行完成后,重复一次第二步,看看ssh是否启动成功。如果依旧没有启动成功,那么继续完成后续步骤。

四、修改ssh配置文件

命令:

vi /etc/ssh/ssh_config

#编辑配置文件,大约在39,40行,将这两句代码前的#取消掉保存退出。

Port 22

Protocol 2,1

五、重启Ubuntu

到这一步本人试过多次,启动、重启ssh服务依然失败,但重启一下Ubuntu就好了,。不知道这是什么鬼,但是屡试不爽,不妨试一下。

ssh还不能登录上,就修改sshd的默认配置

ssh出现permission denied (publickey)问题:

修改/etc/ssh/sshd-config文件.

PubkeyAuthentication yes修改为no

centos7 ssh 免密登录

  • Public Key认证的主要魅力在于认证时承诺不必提供密码就能够同远程系统建立连接。
  • Public Key认证的基础在于一对密钥,public key和private key,public key对数据进行加密而且只能用于加密,private key 只能对所匹配的public key加密过的数据进行解密。
  • 我们把public key放在远程系统合适的位置,然后从本地开始进行ssh连接。
  • 此时,远程的sshd会产生一个随机数并用我们产生的public key进行加密后发给本地,本地会用private key进行解密并把这个随机数发回给远程系统。
  • 最后,远程系统的sshd会得出结论我们拥有匹配的private key允许我们登录。

一、serverA 免密登录 serverB 原理

  1. 首先在 serverA 上生成一对秘钥(ssh-keygen)
  2. 将公钥拷贝到 serverB,重命名 authorized_keys
  3. serverA 向 serverB 发送一个连接请求,信息包括用户名、ip
  4. serverB 接到请求,会从 authorized_keys 中查找,是否有相同的用户名、ip,如果有 serverB 会随机生成一个字符串
  5. 然后使用使用公钥进行加密,再发送个 serverA
  6. serverA 接到 serverB 发来的信息后,会使用私钥进行解密,然后将解密后的字符串发送给 serverB
  7. serverB 接到 serverA 发来的信息后,会给先前生成的字符串进行比对,如果一直,则允许免密登录

二、Centos7 默认安装了 ssh服务

三、启动 ssh 服务

# 查看 ssh 状态
systemctl status sshd
# 启动 ssh
systemctl start sshd
# 停止 ssh
systemctl stop sshd

四、serverA 生成秘钥,遇到提示直接敲回车即可

CentOS7 默认使用RSA加密算法生成密钥对,保存在~/.ssh目录下的id_rsa(私钥)和id_rsa.pub(公钥)。也可以使用“-t DSA”参数指定为DSA算法,对应文件为id_dsa和id_dsa.pub,密钥对生成过程会提示输入私钥加密密码,可以直接回车不使用密码保护。

ssh-keygen

五、移动 id_rsa.pub 文件

# 方法一
# 将 serverA ~/.ssh目录中的 id_rsa.pub 这个文件拷贝到你要登录的 serverB 的~/.ssh目录中 scp 
~/.ssh/id_rsa.pub 192.168.0.101:~/.ssh/ 
# 然后在 serverB 运行以下命令来将公钥导入到~/.ssh/authorized_keys这个文件中 
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys 
# 另外要注意请务必要将服务器上 ~/.ssh权限设置为700 
~/.ssh/authorized_keys的权限设置为600 #
这是linux的安全要求,如果权限不对,自动登录将不会生效
# 方法二
ssh-copy-id -i ~/.ssh/id_rsa.pub remote-host

七、验证免密登录

ssh root@serverB

八、无法登陆原因分析

  1. 请检查文件和目录权限是否正确,我就遇到了一台服务器之前谁把root下的 .ssh 文件夹给了mysql用户和用户组不知道是什么操作,很无语..
  2. 查看配置文件 ,是不是没有启用秘钥登录
  3. 查看日志 tail -f /var/log/secure , 定为错误原因

ssh 免密码登陆以及简化命令

第一部分 SSH无密码登录的设置步骤

首先我们在自己的Linux系统上生成一对SSH Key:SSH密钥和SSH公钥.密钥保存在自己的Linux系统上。

然后公钥上传到Linux服务器.之后我们就能无密码SSH登录了.SSH密钥就好比是你的身份证明.

1、在自己的Linux系统上生成SSH密钥和公钥

打开终端,使用下面的ssh-keygen来生成RSA密钥和公钥.-t表示type,就是说要生成RSA加密的钥匙.

ssh-keygen -t rsa

RSA也是默认的加密类型.所以你也可以只输入ssh-keygen.默认的RSA长度是2048位.如果你非常注重安全,那么可以指定4096位的长度.

ssh-keygen -b 4096 -t rsa

生成SSH Key的过程中会要求你指定一个文件来保存密钥,按Enter键使用默认的文件就行了.然后需要输入一个密码来加密你的SSH Key.密码至少要20位长度.SSH密钥会保存在home目录下的.ssh/id_rsa文件中.SSH公钥保存在.ssh/id_rsa.pub文件中.

Generating public/private rsa key pair.
Enter file in which to save the key (/home/matrix/.ssh/id_rsa):  按Enter键
Enter passphrase (empty for no passphrase):   输入一个密码
Enter same passphrase again:   再次输入密码
Your identification has been saved in /home/matrix/.ssh/id_rsa.
Your public key has been saved in /home/matrix/.ssh/id_rsa.pub.
The key fingerprint is:
e1:dc:ab:ae:b6:19:b0:19:74:d5:fe:57:3f:32:b4:d0 matrix@vivid
The key's randomart image is:
+---[RSA 4096]----+
| .. |
| . . |
| . . .. . |
| . . o o.. E .|
| o S ..o ...|
| = ..+...|
| o . . .o .|
| .o . |
| .++o |
+-----------------+

查看.ssh/id_rsa文件就会看到,这个文件是经过加密的(encrypted).也就是用你输入的密码来加密.

less .ssh/id_rsa

未分类

2、将SSH公钥上传到Linux服务器

可以使用ssh-copy-id命令来完成.

ssh-copy-id username@remote-server

未分类

输入远程用户的密码后,SSH公钥就会自动上传了.SSH公钥保存在远程Linux服务器的.ssh/authorized_keys文件中.

上传完成后,SSH登录就不需要再次输入密码了.但是首次使用SSH Key登录时需要输入一次SSH密钥的加密密码.(只需要输入一次,将来会自动登录,不再需要输入密钥的密码.)

使用scp命令来传送文件时也不需要输入密码.

SSH Key的知识

Linux系统有一个钥匙环(keyring)的管理程序.钥匙环受到用户登录密码的保护.当你登录Linux系统时,会自动解开钥匙环的密码,从而可访问钥匙环.SSH的密钥和公钥也存储在钥匙环.所以初次使用SSH密钥登录远程Linux服务器时需要输入一次SSH密钥的密码.而将来使用SSH密钥登录时不再输入密码.Ubuntu的钥匙环程序是seahorse.

SSH密钥就好比是你的身份证明.远程Linux服务器用你生成的SSH公钥来加密一条消息,而只有你的SSH密钥可以解开这条消息.所以其他人如果没有你的SSH密钥,是无法解开加密消息的,从而也就无法登录你的Linux服务器。

第二部分 使用用户指定的 SSH 配置文件

通过你最喜欢的编辑器来打开配置文件:

$ vim ~/.ssh/confi 

ssh 配置文件的详细解释:

  • HostName – 定义真正要登录的主机名,此外,你也可以使用数字 IP 地址,不管是在命令行或是 HostName 定义中都允许使用其中任一种。
  • User – 指定以哪一个用户来登录。
  • Port – 设置连接远程主机的端口,默认是 22 端口。但必须是远程主机的 sshd 配置文件中定义的端口号。
  • Protocol – 这个选项定义了优先使用 ssh 支持的协议版本。常用的值为 ‘1’ 和 ‘2’,同时使用两个协议版本则必须使用英文逗号隔开。
  • IdentityFile – 指定一个用于读取用户 DSA、Ed25519、ECDSA 等授权验证信息的文件。
  • ForwardX11 – 定义 X11 连接是否自动重定向到安全通道和 DISPLAY 设置。有两个可以设置的值,即 yes 或 no。
  • Compression – 默认值为 no,如果设置为 yes,则在连接远程主机过程中使用压缩进行传输。
  • ServerAliveInterval – 设置当没有收到服务器响应 (或者数据))时的超时时间,单位为秒,ssh 会通过加密信道发送信息,请求服务器响应。默认值为 0,这意味着 ssh 不会向服务器发送响应请求;如果定义了 BatchMode 选项,则默认是 300 秒。
  • ServerAliveCountMax – 设置服务器在没有接收到服务器的任何响应时,由服务器发送的活动信息数量。
  • LogLevel – 定义 ssh 登录信息的的日志冗余级别。允许的值为:QUIET、FATAL、ERROR、INFO、VERBOSE、DEBUG、DEBUG1、DEBUG2 和 DEBUG3,默认为 INFO。

使用ssh配置之后可以使用

$ ssh centos7

链接服务器~