一、利用Nginx反向代理Jpress+Tomcat

1、环境准备

Nginx反向代理实现Tomcat+halo个人博客和Jpress博客_tomcat

服务器

IP地址

作用

系统版本

Proxy代理服务器

10.0.0.101

负载均衡Nginx Web服务器

Ubuntu2004

Jpress服务器

10.0.0.102

网站服务器1

Ubuntu2004

Jpress服务器

10.0.0.103

网站服务器2

Ubuntu2004

数据库

10.0.0.104

数据库服务器

Ubuntu2004

client


测试访问网站

Windows

2、安装jpress
# jpress服务器(10.0.0.102和10.0.0.103都需操作): 
[root@ubuntu2004 ~]#bash install_tomcat.sh
[root@ubuntu2004 ~]#mkdir /data/jpress -p
[root@ubuntu2004 ~]#cd /data/jpress/

[root@ubuntu2004 jpress]#ls
jpress-v4.2.0.war
[root@ubuntu2004 jpress]#mv jpress-v4.2.0.war ROOT.war
[root@ubuntu2004 jpress]#chown -R tomcat. /data/jpress/
[root@ubuntu2004 jpress]#vim /usr/local/tomcat/conf/server.xml
#增加以下</Host>开始的三行
</Host>
<Host name="jpress.wang.org" appBase="/data/jpress" unpackWARs="true" autoDeploy="true">
</Host>
.....

</Engine>
</Service>
</Server>
[root@ubuntu2004 jpress]#systemctl restart tomcat.service
# 如果想显示个性的tomcat版本,在端口行最后增加server=“****”
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" Server="Dayu-Jpress"/>

Nginx反向代理实现Tomcat+halo个人博客和Jpress博客_mysql_02

3、创建数据库
#数据库服务器(10.0.0.104):
[root@mysql ~]#vim /etc/mysql/mysql.conf.d/mysqld.cnf
[mysqld]
default_authentication_plugin=mysql_native_password #增加此行

#bind-address = 127.0.0.1 #注释掉
#mysqlx-bind-address = 127.0.0.1 #注释掉

[root@mysql ~]#systemctl restart mysql.service
# 客户端测试连接

Nginx反向代理实现Tomcat+halo个人博客和Jpress博客_tomcat_03

Nginx反向代理实现Tomcat+halo个人博客和Jpress博客_nginx_04

Nginx反向代理实现Tomcat+halo个人博客和Jpress博客_jpress_05

4、 配置Nginx反向代理
[root@nginx ~]#bash nginx_install.sh
[root@nginx ~]#mkdir /apps/nginx/conf/conf.d
[root@nginx ~]#vim /apps/nginx/conf/nginx.conf
....
include /apps/nginx/conf/conf.d/*.conf; #最后增加此行
}
[root@nginx ~]#vim /apps/nginx/conf/conf.d/wang.org.conf
upstream jpress {
server 10.0.0.102:8080;
server 10.0.0.103:8080;
}
server {
listen 80;
server_name jpress.wang.org;
location / {
proxy_pass http://jpress;
proxy_set_header host $http_host;
}
}
[root@nginx ~]#nginx -t
[root@nginx ~]#nginx -s reload
5、客户端测试

Nginx反向代理实现Tomcat+halo个人博客和Jpress博客_jpress_06

二、安装Memcached实现会话保持

1、环境准备

服务器

IP地址

作用

系统版本

Proxy代理服务器

10.0.0.101

负载均衡Nginx Web服务器

Ubuntu2004

Jpress服务器

10.0.0.105

网站服务器1

Ubuntu2004

Jpress服务器

10.0.0.106

网站服务器2

Ubuntu2004

数据库

10.0.0.104

数据库服务器

Ubuntu2004

client


测试访问网站

Windows

2、搭建Jpress
#Jpress(10.0.0.105、10.0.0.106):

[root@jpress2 ~]# mkdir /data/jpress1 -p
[root@jpress2 ~]# mv jpress-v4.2.0.war ROOT.war
[root@jpress2 ~]# mv ROOT.war /data/jpress1/
[root@jpress2 ~]# chown -R tomcat. /data/jpress1
[root@jpress2 ~]# bash install_tomcat.sh
[root@jpress2 ~]# vim /usr/local/tomcat/conf/server.xml
...
<Host name="jpress.wang.org" appBase="/data/jpress2" unpackWARs="true" autoDeploy="true">
<Context path="/test" docBase="/opt" reloadable="true" /> #增加一个测试路径
</Host>
....
[root@jpress2 ~]# systemctl restart tomcat.service

[root@jpress2 ~]# apt install memcached
[root@jpress2 ~]# vim /usr/local/tomcat/conf/context.xml
#以下内容增加在最后一行前
....
<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
memcachedNodes="n1:10.0.0.105:11211,n2:10.0.0.106:11211"
failoverNodes="n2"
requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"
/>
</Context> #此行是最后一行

[root@jpress2 ~]# systemctl restart memcached.service
[root@jpress2 ~]# systemctl restart tomcat.service
3、创建数据库
#数据库服务器(10.0.0.104):
[root@mysql ~]#vim /etc/mysql/mysql.conf.d/mysqld.cnf
[mysqld]
default_authentication_plugin=mysql_native_password #增加此行

#bind-address = 127.0.0.1 #注释掉
#mysqlx-bind-address = 127.0.0.1 #注释掉

[root@mysql ~]#systemctl restart mysql.service
# 客户端连接数据库
4、Nginx配置
[root@nginx ~]#mkdir /apps/nginx/ssl
[root@nginx ~]#cd /apps/nginx/ssl
[root@nginx ssl]#openssl req -newkey rsa:4096 -nodes -sha256 -keyout ca.key -x509 -days 2650 -out ca.crt
[root@nginx ssl]#openssl req -newkey rsa:4096 -nodes -sha256 -keyout www.wang.org.key -out www.wang.org.csr
[root@nginx ssl]#openssl x509 -req -days 3650 -in www.wang.org.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out www.wang.org.crt
[root@nginx ssl]#cat www.wang.org.crt ca.crt > www.wang.org.pem
[root@nginx ssl]#cd
[root@nginx ~]#vim /apps/nginx/conf/conf.d/wang.org.conf
upstream jpress {
server n1.wang.org:8080;
server n2.wang.org:8080;
}
server {
listen 80;
server_name jpress.wang.org;
# location / {
# proxy_pass http://jpress;
# proxy_set_header host $http_host;
#
# }
return 302 https://$server_name$request_uri;
}
server {
listen 443 ssl http2;
server_name jpress.wang.org;
ssl_certificate /apps/nginx/ssl/www.wang.org.pem;
ssl_certificate_key /apps/nginx/ssl/www.wang.org.key;
ssl_session_cache shared:sslcache:20m;
ssl_session_timeout 10m;
location / {
proxy_pass http://jpress;
proxy_set_header host $http_host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}

[root@nginx ~]#vim /etc/hosts
10.0.0.101 jpress.wang.org
10.0.0.105 n1.wang.org
10.0.0.106 n2.wang.org

[root@nginx ~]#nginx -s reload
5、安装Memcached保持会话
# 10.0.0.104、10.0.0.105:
[root@ubuntu2004 jpress]#apt install memcached -y
[root@ubuntu2004 jpress]#vim /etc/memcached.conf
-m 1000 #内存改为1000M,建议改为物理机内存的1/4---1/2
-l 0.0.0.0 #需改监听所有ip
[root@ubuntu2004 jpress]#systemctl restart memcached.service
6、客户端测试

Nginx反向代理实现Tomcat+halo个人博客和Jpress博客_nginx_07

Nginx反向代理实现Tomcat+halo个人博客和Jpress博客_nginx_08

Nginx反向代理实现Tomcat+halo个人博客和Jpress博客_halo_09

Nginx反向代理实现Tomcat+halo个人博客和Jpress博客_halo_10


三、利用Nginx反向代理部署博客系统Halo

1、环境准备

服务器

IP地址

作用

系统版本

Proxy代理服务器

10.0.0.101

负载均衡Nginx Web服务器

Ubuntu2004

halo服务器

10.0.0.102

博客服务器1

Ubuntu2004

halo服务器

10.0.0.103

博客服务器2

Ubuntu2004

数据库+NFS服务器

10.0.0.104

数据库服务器+NFS服务器

Ubuntu2004

client


测试访问网站

Windows

#数据库服务器(10.0.0.104):
mysql> create database halodb character set utf8mb4 collate utf8mb4_bin;
mysql> create user halo@'10.0.0.%' identified by '123456';
mysql> grant all on halo.* to halo@'10.0.0.%';
mysql> flush privileges;
2、安装halo
# halo服务器(10.0.0.102、10.0.0.103):
[root@halo-server1 ~]#apt -y install openjdk-11-jdk #halo支持openjdk11以上,不推荐 Oracle 版本
[root@halo-server1 ~]#java -version
openjdk version "11.0.16" 2022-07-19
[root@halo-server1 ~]#useradd -m halo
[root@halo-server1 ~]#vim /etc/sudoers #增加sudo权限
halo ALL=(root) NOPASSWD: ALL
[root@halo-server1 ~]#passwd halo
[root@halo-server1 ~]#su - halo
[halo@halo-server1 ~]$mkdir ~/app
[halo@halo-server1 ~]$cd ~/app
[halo@halo-server1 app]$wget https://dl.halo.run/release/halo-1.5.4.jar -O halo.jar #下载并改名为halo.jar
[halo@halo-server1 app]$wget https://dl.halo.run/config/application-template.yaml -O ./application.yaml #下载配置文件模板
[halo@halo-server1 app]$cd halo
[halo@halo-server1 halo]$vim application.yaml
server:
port: 8090

# Response data gzip.
compression:
enabled: true
#spring:
#datasource:
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
#填写正确的数据库ip地址和用户名密码
url: jdbc:mysql://10.0.0.104:3306/halodb?characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true
username: halo
password: 123456
...
halo:

# Your admin client path is https://your-domain/{admin-path}
admin-path: admin

# memory or level
cache: memory

[halo@halo-server1 halo]$exit # 以下操作需要退回root用户操作
#下载service模板
[root@halo-server1 app]#wget https://dl.halo.run/config/halo.service -O /etc/systemd/system/halo.service
[root@halo-server1 app]#vim /etc/systemd/system/halo.service
[Unit]
Description=Halo Service
Documentation=https://docs.halo.run
After=network-online.target
Wants=network-online.target

[Service]
Type=simple
User=halo #需改为运行halo的用户
ExecStart=/usr/bin/java -server -Xms256m -Xmx256m -jar /home/halo/app/halo.jar #需改为halo.jar的绝对路径
ExecStop=/bin/kill -s QUIT $MAINPID
Restart=always
StandOutput=syslog

StandError=inherit

[Install]
WantedBy=multi-user.target

[root@halo-server1 app]#systemctl daemon-reload
[root@halo-server1 app]#systemctl restart halo.service
[root@halo-server1 app]#systemctl status halo.service
[root@halo-server1 app]#journalctl -n 20 -u halo #如果启动有问题,用这条命令查看日志排查

Nginx反向代理实现Tomcat+halo个人博客和Jpress博客_tomcat_11

Nginx反向代理实现Tomcat+halo个人博客和Jpress博客_halo_12

3、客户端测试连接
#浏览器输入http://10.0.0.103:8090   #这里的IP地址就是安装halo的服务器地址

Nginx反向代理实现Tomcat+halo个人博客和Jpress博客_nginx_13

4、配置NFS服务端
#NFS服务器设置(10.0.0.104):
[root@mysql ~]#apt install -y nfs-server
[root@mysql ~]#mkdir /data/halo -p
[root@mysql ~]#useradd -u 1001 halo #创建一个和客户端halo同ID的用户
[root@mysql ~]#chown halo. /data/halo
[root@mysql ~]#vim /etc/exports
/data/halo 10.0.0.0/24(rw,all_squash,anonuid=1001,anongid=1001)

[root@mysql ~]#exportfs -r
[root@mysql ~]#exportfs -v

Nginx反向代理实现Tomcat+halo个人博客和Jpress博客_nginx_14

5、挂载NFS
# nfs客户端设置(10.0.0.102、10.0.0.103):
[root@halo-server1 app]#rsync -av app/* root@10.0.0.104:/data/halo/ #先拷贝一份到nfs服务器保留属性
[root@halo-server1 ~]#apt install -y nfs-common
[root@halo-server1 ~]#vim /etc/fstab
10.0.0.104:/data/halo /home/halo/app/ nfs _netdev 0 0
[root@halo-server1 ~]#mount -a
[root@halo-server1 ~]#systemctl restart halo.service
6、Nginx反向代理
[root@nginx ssl]#vim /apps/nginx/conf/conf.d/halo.wang.org.conf
upstream halo {
hash $remote_addr;
server 10.0.0.102:8090;
server 10.0.0.103:8090;
}
server {
listen 80;
server_name halo.wang.org;
client_max_body_size 1024m;
return 302 https://$server_name$request_uri;
}
server {
listen 443 ssl http2;
server_name halo.wang.org;
ssl_certificate /apps/nginx/ssl/www.wang.org.pem;
ssl_certificate_key /apps/nginx/ssl/www.wang.org.key;
ssl_session_cache shared:sslcache:20m;
ssl_session_timeout 10m;
location / {
proxy_pass http://halo;
proxy_set_header HOST $host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
7、客户端访问测试

Nginx反向代理实现Tomcat+halo个人博客和Jpress博客_mysql_15