[[Oracle APEX]]
1. 新旧架构对比
1. 旧架构
旧架构
2. 新架构
新架构
2. 准备
-
检查现有端口是否被占用netstat -tuln | grep 端口
-
检查 即将用到的端口在 SELinux 中端口是否被占用
1
2
3
4
5
6
7
8
9
|
# 对外默认端口
[root@xxxxxxxxx opt]# semanage port --list |grep 8030
[root@xxxxxxxxx opt]# semanage port --list |grep 8040
# AJP/1.3 端口
[root@xxxxxxxxx opt]# semanage port --list |grep 8039
[root@xxxxxxxxx opt]# semanage port --list |grep 8049
# SHUTDOWN 端口
[root@xxxxxxxxx opt]# semanage port --list |grep 8035
[root@xxxxxxxxx opt]# semanage port --list |grep 8045
|
- 复制Tomcat目录及 ords目录
| IP |
tomcat |
ords |
| 192.168.0.12 |
tomcat_8030_test162 |
ords_8030_test163 |
| 192.168.0.12 |
tomcat_8040_testdb |
ords_8040_testdb |
| IP |
tomcat |
ords |
| 192.168.0.13 |
tomcat_8030_test162 |
ords_8030_test163 |
| 192.168.0.13 |
tomcat_8040_testdb |
ords_8040_testdb |
| IP |
tomcat |
ords |
| 192.168.0.14 |
tomcat_8030_test164 |
ords_8030_test164 |
| 192.168.0.14 |
tomcat_8040_test163 |
ords_8040_test163 |
| IP |
tomcat |
ords |
| 192.168.0.15 |
tomcat_8030_test164 |
ords_8030_test164 |
| 192.168.0.15 |
tomcat_8040_test163 |
ords_8040_test163 |
3. Ords配置
-
重设配置文件目录(12)
1
2
3
|
[root@xxxxxxxxxx ords_8030_test163]# java -jar apex_test.war configdir /opt/ords_8030_test163/config_edex
[root@xxxxxxxxxx ords_8040_testdb]# java -jar apex_test.war configdir /opt/ords_8040_testdb/config_edex
|
-
移除其他db配置
1
2
3
4
5
6
7
8
9
|
[root@xxxxxxxxxx ords_8030_test163]# rm -fr /opt/ords_8030_test163/config_apex_test/apex_test/conf/test164*
[root@xxxxxxxxxx ords_8030_test163]# rm -fr /opt/ords_8030_test163/config_apex_test/apex_test/conf/test163*
<!-- 移除其他db url映射 -->
[root@xxxxxxxxxx ords_8030_test163]# vim /opt/ords_8030_test163/config_apex_test/apex_test/url-mapping.xml
[root@xxxxxxxxxx ords_8040_testdb]# rm -fr /opt/ords_8040_testdb/config_apex_test/apex_test/conf/test164*
[root@xxxxxxxxxx ords_8040_testdb]# rm -fr /opt/ords_8040_testdb/config_apex_test/apex_test/conf/test163*
<!-- 移除其他db url映射 -->
[root@xxxxxxxxxx ords_8040_testdb]# vim /opt/ords_8040_testdb/config_apex_test/apex_test/url-mapping.xml
|
4. Tomcat配置
SELinux 添加端口
- 将用到的端口号加到 SELinux的 http_port_t 里
1
2
3
4
5
6
7
8
9
10
11
12
13
|
[root@xxxxxxxxxx ops]# semanage port --list |grep http_port_t
[root@xxxxxxxxxx ops]# semanage port --add --type http_port_t --proto tcp 8030
[root@xxxxxxxxxx ops]# semanage port --add --type http_port_t --proto tcp 8040
[root@xxxxxxxxxx ops]# semanage port --add --type http_port_t --proto tcp 8031
# AJP/1.3 8039,8049
[root@xxxxxxxxxx ops]# semanage port --add --type http_port_t --proto tcp 8039
[root@xxxxxxxxxx ops]# semanage port --add --type http_port_t --proto tcp 8049
[root@xxxxxxxxxx ops]# semanage port --add --type http_port_t --proto tcp 8032
# SHUTDOWN 8035,8045
[root@xxxxxxxxxx ops]# semanage port --add --type http_port_t --proto tcp 8035
[root@xxxxxxxxxx ops]# semanage port --add --type http_port_t --proto tcp 8045
[root@xxxxxxxxxx ops]# semanage port --add --type http_port_t --proto tcp 8033
|
Tomcat Systemd服务
- 调整Tomcat systemd服务
复制 systemd服务, 再调整对应tomcat目录
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
# 此处演示 tomcat_8030_test162
[root@xxxxxxxxxx ops]# cp /etc/systemd/system/tomcat.service /etc/systemd/system/tomcat_test162.service
[root@xxxxxxxxxx ops]# vim /etc/systemd/system/tomcat_test162.service
[Unit]
Description=Tomcat_test162
Wants=network.target
After=network.target
[Service]
User=tomcat
Group=tomcat
Type=forking
UMask=0007
RestartSec=10
Environment=CATALINA_PID=/opt/tomcat_8030_test162/tomcat.pid
Environment=CATALINA_HOME=/opt/tomcat_8030_test162
Environment=CATALINA_BASE=/opt/tomcat_8030_test162
Environment=JAVA_HOME=/usr/java/jdk-16
Environment='CATALINA_OPTS=-Xms512M -Xmx1G -Djava.net.preferIPv4Stack=true'
Environment='JAVA_OPTS=-Djava.awt.headless=true -Dconfig.url=/opt/edex_config_rcs'
ExecStart=/opt/tomcat_8030_test162/bin/startup.sh
ExecStop=/opt/tomcat_8030_test162/bin/shutdown.sh
SuccessExitStatus=143
Restart=on-failure
[Install]
WantedBy=multi-user.target
|
Tomcat配置
- 移除tomcat_8030_test162下旧的 ords
1
|
[root@xxxxxxxxxx opt]# rm -fr tomcat_8030_test162/webapps/*
|
- 将 ords_8030_test162 下的 apex_test.war cp到tomcat_8030_test162 下
1
|
[root@xxxxxxxxxx opt]# cp /opt/ords_8030_test162/apex_test.war /opt/tomcat_8030_test162/webapps/*
|
- 调整 tomcat 端口
1
2
3
|
[root@xxxxxxxxxx opt]# vim /opt/tomcat_8030_test162/conf/server.xml
# setenv.sh,默认没有,此为我自己加的
[root@xxxxxxxxxx opt]# vim /opt/tomcat_8030_test162/bin/setenv.sh
|
- 将tomcat 和 ords 目录都授权给tomcat 用户
1
2
|
[root@xxxxxxxxxx opt]# chown -R tomcat:tomcat /opt/tomcat_8030_test162
[root@xxxxxxxxxx opt]# chown -R tomcat:tomcat /opt/ords_8030_test162
|
- 验证启动tomcat服务,并设置自启
1
2
3
4
5
6
7
8
9
10
|
[root@xxxxxxxxxx opt]# systemctl daemon-reload
[root@xxxxxxxxxx opt]# systemctl start tomcat_test162
[root@xxxxxxxxxx opt]# systemctl start tomcat_testdb
[root@xxxxxxxxxx opt]# systemctl enable tomcat_test162
[root@xxxxxxxxxx opt]# systemctl enable tomcat_testdb
# 检查 2个tomcat 是否已启动
[root@xxxxxxxxxx opt]# ps aux| grep tomcat
|
- 同理依次调整好 192.168.0.13/14/15/16
5. Nginx配置
此处依 Nginx 192.168.0.10为例.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
|
[root@xxxxxxxxxx Admin]# vim /etc/nginx/conf.d/default_443.conf
upstream tomcat_test162 {
ip_hash;
server 192.168.0.12:8030 ;# down;
server 192.168.0.13:8030 weight=2;
}
upstream tomcat_testdb {
ip_hash;
server 192.168.0.12:8040 ;# down;
server 192.168.0.13:8040 weight=2;
}
upstream tomcat_test164 {
ip_hash;
server 192.168.0.14:8030 ;# down;
server 192.168.0.15:8030 weight=2;
}
upstream tomcat_test163 {
ip_hash;
server 192.168.0.14:8040 ;# down;
server 192.168.0.15:8040 weight=2;
}
server {
location /apex_test/test162/ {
proxy_set_header Host $host;
proxy_set_header Origin "";
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Real-Port $remote_port;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://tomcat_test162;
client_max_body_size 120m;
}
location /apex_test/testdb/ {
proxy_set_header Host $host;
proxy_set_header Origin "";
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Real-Port $remote_port;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://tomcat_testdb;
client_max_body_size 120m;
}
location /apex_test/test164/ {
proxy_set_header Host $host;
proxy_set_header Origin "";
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Real-Port $remote_port;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://tomcat_test164;
client_max_body_size 120m;
}
location /apex_test/test163/ {
proxy_set_header Host $host;
proxy_set_header Origin "";
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Real-Port $remote_port;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://tomcat_test163;
client_max_body_size 120m;
}
}
|
问题
- oracle apex 运行提示如下
1
2
3
|
An unexpected error with the following message oc
curred: A trailer fields supplier may not be set for this response. Either the underlying protocol does not support trailer fields or the protocol requires that the
supplier is set before the response is committed
|
官方讨论的解决办法
Nginx配置 指定使用 http1.1
1
2
|
proxy_pass http://your server:port/ords/;
proxy_http_version 1.1;
|
- 应用内上传的静态文件访问404
描述:
通过后台,共享组件中应用静态文件上传的文件,前端访问时会报404
通过重新配置 ords, ords19.4的是使用APEX_PUBLIC_USER用户,新版本使用ORDS_PUBLIC_USER
迁移后配置
1
2
3
4
5
6
7
8
9
|
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties>
<comment>Saved on Sat Feb 22 16:09:57 UTC 2025</comment>
<entry key="db.hostname">l01EDIDSU0101</entry>
<entry key="db.sid">EDEXIDSU</entry>
<entry key="db.username">APEX_PUBLIC_USER</entry>
<entry key="plsql.gateway.mode">direct</entry>
</properties>
|
修正后配置