背景:jar包 + Linux服务器
目标:外网可以直接通过域名访问Java网站
1、环境安装
- 下载jdk
下载地址:https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html - 解压下载文件
tar xzf 下载文件名
- 配置环境变量
vim ~/.profile
在文件最后加入
JAVA_HOME=JDK地址
CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar
PATH=$JAVA_HOME/bin:$HOME/bin:$HOME/.local/bin:$PATH
先输入i
进入编辑状态,退出时先按Esc
,再输入:wq!
,保存退出
- 更新变量
source ~/.profile
2、java使用进程运行
- 创建shell文件
创建:stop.sh
#!/bin/bash
PID=$(ps -ef | grep 包名.jar | grep -v grep | awk '{ print $2 }')
if [ -z "$PID" ]
then
echo Application is already stopped
else
echo kill $PID
kill $PID
fi
创建:start.sh
#!/bin/bash
nohup java -jar 包名.jar --server.port=端口 &
创建:run.sh
#!/bin/bash
echo stop application
source stop.sh
echo start application
source start.sh
1、没有权限,使用chmod u+x *.sh
赋予权限
2、如果在windows系统创建,需使用dos2unit 文件名.sh
将文件unix化
- 运行
使用./run.sh
运行 - 查看执行情况
cat nohup.out
如果执行成功可以使用http://服务器IP:端口/页面地址
访问网站
3、使用nginx进行转发
- nginx安装
网络上安装教程很多,可以参考:https://www.cnblogs.com/sz-jack/p/5200283.html - nginx配置
server
{
listen 80;
server_name 域名 ;
index index.html index.htm index.php default.html default.htm default.php;
# 静态资源进行转发,因为打包时一起打包在jar包内
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
{
proxy_pass http://域名:端口;
expires 30d;
}
# 静态资源进行转发,因为打包时一起打包在jar包内
location ~ .*\.(js|css)?$
{
proxy_pass http://域名:端口;
expires 12h;
}
location ~ /.well-known {
allow all;
}
location ~ /\.
{
deny all;
}
location / {
proxy_pass http://域名:端口;
}
}
如果需要https访问,则需要证书,配置可以参考
server
{
listen 80;
#listen [::]:80;
server_name 域名 ;
index index.html index.htm index.php default.html default.htm default.php;
return 301 https://$server_name$request_uri;
}
访问域名时,直接跳转https,其它在https配置中进行配置,如默认页面,静态资源访问,可以参考非http访问配置
4、后记
本人方法可能不是最优的,但是至少可以实现要求,如果其它有更好的方法,欢迎留言探讨。