Nginx反向代理实现Tomcat+Jpress和halo

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

1、环境准备

image

服务器 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"/>

image

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 
# 客户端测试连接

image

image

image

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、客户端测试

image

二、安装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、客户端测试

image

image

image

image

三、利用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     #如果启动有问题,用这条命令查看日志排查

image

image

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

image

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

image

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、客户端访问测试

image

posted @ 2022-09-24 21:34  大雨转暴雨  阅读(195)  评论(0编辑  收藏  举报