2026年2月25日水曜日

Oracle APEXの実行環境にnginxによるリバース・プロキシを構成する - 追加手順

以下の記事で作成した環境を前提として、追加で実施できる設定を検討します。


データベース・ユーザーのパスワード設定



データベースに作成されているORDSおよびAPEX関連のデータベース・ユーザーについて確認します。

set pages 100 lines 80 trims on trimo on
col username format a30
col account_status format a20
col authentication_type format a20
col profile format a20
select username, account_status, authentication_type, profile from dba_users where username like 'ORDS%' or username like 'APEX%';

SQL> select username, account_status, authentication_type, profile from dba_users where username like 'ORDS%' or username like 'APEX%';


USERNAME       ACCOUNT_STATUS     AUTHENTICATION_TYPE

------------------------------ -------------------- --------------------

PROFILE

--------------------

APEX_LISTENER       OPEN     PASSWORD

DEFAULT


APEX_PUBLIC_USER       OPEN     PASSWORD

DEFAULT


APEX_PUBLIC_ROUTER       OPEN     NONE

DEFAULT


APEX_REST_PUBLIC_USER       OPEN     PASSWORD

DEFAULT


ORDS_PUBLIC_USER       OPEN     PASSWORD

DEFAULT


ORDS_METADATA       OPEN     NONE

DEFAULT


APEX_240200       LOCKED     NONE

DEFAULT



7 rows selected.


SQL> 


この中で、APEX_LISTENERAPEX_REST_PUBLIC_USERは現行のAPEXでは使用しないアカウントです。APEXのメディアからapexins.sqlを実行してインストールしたときは、これらのユーザーは作成されないことより、ORDSのコンテナ作成時にこれらのユーザーが作られているようです。AUTHENTICATION_TYPEがPASSWORDなので、これらのユーザーのパスワードが期限切れになる可能性はありますが、使用しないのでそのままでも問題ないでしょう。

ユーザーAPEX_PUBLIC_USERAPEX_PUBLIC_ROUTERはAPEXの実行に使用されます。APEX_PUBLIC_ROUTERAUTHENTICATION_TYPENONEであるため、パスワード認証が行われません。結果としてプロファイルの設定に関わらずパスワードが期限切れになることはありません。ユーザーAPEX_PUBLIC_USERAUTHENTICATION_TYPEPASSWORDであるため、プロファイルDEFAULTの設定に依存してパスワードの期限が切れることがあります。

ユーザーAPEX_PUBLIC_USERについてはパスワード無しでも運用上問題が発生したことがない(ORDSからユーザーAPEX_PUBLIC_USERの接続は、ORDS_PUBLIC_USERを介したプロキシ接続になる)ため、こちらはAUTHENTICATION_TYPENONEに変更することにより、パスワードの期限切れを回避できます。以下のコマンドを実行します。

alter user apex_public_user no authentication account unlock;

SQL> alter user apex_public_user no authentication account unlock;


User altered.


SQL> 


この他にパスワードの期限切れが発生する可能性があるユーザーはORDS_PUBLIC_USERです。このユーザーはプロファイルDEFAULTが適用されています。

プロファイルDEFAULTを確認します。

col resource_name format a30
col limit format a30
select resource_name, limit from dba_profiles where profile = 'DEFAULT';

SQL> select resource_name, limit from dba_profiles where profile = 'DEFAULT';


RESOURCE_NAME       LIMIT

------------------------------ ------------------------------

FAILED_LOGIN_ATTEMPTS       10

COMPOSITE_LIMIT        UNLIMITED

SESSIONS_PER_USER       UNLIMITED

CPU_PER_SESSION        UNLIMITED

CPU_PER_CALL       UNLIMITED

LOGICAL_READS_PER_SESSION      UNLIMITED

LOGICAL_READS_PER_CALL       UNLIMITED

IDLE_TIME       UNLIMITED

CONNECT_TIME       UNLIMITED

PRIVATE_SGA       UNLIMITED

PASSWORD_LIFE_TIME       UNLIMITED

PASSWORD_REUSE_TIME       UNLIMITED

PASSWORD_REUSE_MAX       UNLIMITED

PASSWORD_VERIFY_FUNCTION       NULL

PASSWORD_LOCK_TIME       1

PASSWORD_GRACE_TIME       7

INACTIVE_ACCOUNT_TIME       365

PASSWORD_ROLLOVER_TIME       0


18 rows selected.


SQL> 

Oracle Database Freeは主に開発者による利用を対象としているためか、PASSWORD_LIFE_TIMEUNLIMITEDに設定されています。一般的にはPASSWORD_LIFE_TIMEのデフォルトは180日です。


パッチの適用


Oracle Databaseのサポート契約がある方は、APEXの最新パッチをダウンロードできます。


APEX 24.2のパッチはp37366599_2420_Generic.zipとしてダウンロードされます。

以下よりパッチの適用手順を紹介します。

パッチは/tmp/p37366599_2420_Generic.zipとして、アップロード済みとします。

ユーザーoracleに切り替えます。

sudo su - oracle

[opc@ordsmcp ~]$ sudo su - oracle

Last login: Wed Feb 25 06:18:20 GMT 2026 on pts/1

[oracle@ordsmcp ~]$ 


パッチをコンテナapex-dbにコピーします。podman cpまたはdocker cpコマンドを実行します。

podman cp /tmp/p37366599_2420_Generic.zip apex-db:/home/oracle

[oracle@ordsmcp ~]$ podman cp /tmp/p37366599_2420_Generic.zip apex-db:/home/oracle

[oracle@ordsmcp ~]$ 


コンテナapex-dbに接続し、パッチを適用します。

podman exec -it apex-db bash

[oracle@ordsmcp ~]$ podman exec -it apex-db bash

bash-4.4$ 


パッチを解凍します。

unzip -q /tmp/p37366599_2420_Generic.zip

パッチは、パッチ番号の名前が付いたディレクトリ/home/oracle/37366599以下に解凍されます。

bash-4.4$ unzip -q p37366599_2420_Generic.zip 

bash-4.4$ ls

37366599  apex p37366599_2420_Generic.zip  setPassword.sh

bash-4.4$ 


パッチを展開したディレクトリに移動し、catpatch.sqlを実行して、データベース・オブジェクトを修正します。

cd 37366599
export NLS_LANG=American_America.AL32UTF8
sqlplus / as sysdba
alter session set container = freepdb1;
@catpatch

bash-4.4$ cd 37366599/

bash-4.4$ export NLS_LANG=American_America.AL32UTF8

bash-4.4$ sqlplus / as sysdba


SQL*Plus: Release 23.26.1.0.0 - Production on Wed Feb 25 06:53:10 2026

Version 23.26.1.0.0


Copyright (c) 1982, 2025, Oracle.  All rights reserved.



Connected to:

Oracle AI Database 26ai Free Release 23.26.1.0.0 - Develop, Learn, and Run for Free

Version 23.26.1.0.0


SQL> alter session set container = freepdb1;


Session altered.

SQL> @catpatch


. ORACLE

.

. Oracle APEX 24.2.%

. Patch Set Exception 37366599

........................................


APEX_VERSION

------------------------------

APEX_SCHEMA

--------------------------------------------------------------------------------

24.2.0

APEX_240200




PL/SQL procedure successfully completed.



Session altered.



APEX_SCHEMA

--------------------------------------------------------------------------------

APEX_240200



PL/SQL procedure successfully completed.


... Syncing with Post-Upgrade Job


PL/SQL procedure successfully completed.


... Disabling Jobs


PL/SQL procedure successfully completed.


...wwv_util_APEX_240200


Package body created.


[中略]


... Enabling Jobs


PL/SQL procedure successfully completed.


...Validating APEX

...(06:53:47) Starting validate_apex for APEX_240200

...(06:53:47) Checking missing privileges for APEX_240200

...(06:53:48) Checking missing privileges for APEX_GRANTS_FOR_NEW_USERS_ROLE

...(06:53:48) Re-generating APEX_240200.wwv_flow_db_version

... wwv_flow_db_version is up to date

...(06:53:48) Checking for sys.wwv_flow_cu_constraints

...(06:53:48) Checking invalid public synonyms

...(06:53:48) Key object existence check

...(06:53:48) Post-ORDS updates

...(06:53:48) calling wwv_util_apex_240200.post_ords_upgrade

...enabled_schema

...define_module

...define_template

...define_handler

...set_module_origins_allowed

...(06:53:49) Setting DBMS Registry for APEX to valid

...(06:53:49) Exiting validate_apex


PL/SQL procedure successfully completed.


...Recompiling invalid public synonyms


PL/SQL procedure successfully completed.



PL/SQL procedure successfully completed.


timing for: Complete Patch 37366599

Elapsed: 00:00:21.47

Disconnected from Oracle AI Database 26ai Free Release 23.26.1.0.0 - Develop, Learn, and Run for Free

Version 23.26.1.0.0

bash-4.4$ 


以上でデータベースへのパッチ適用は完了です。

ORDSのコンテナが参照している静的ファイルを更新します。

パッチからimagesを取り出します。

unzip -q /tmp/p37366599_2420_Generic.zip "37366599/images/*"
ls 37366599/images

[oracle@ordsmcp ~]$ unzip -q /tmp/p37366599_2420_Generic.zip "37366599/images/*"[oracle@ordsmcp ~]$ ls 37366599/images

apex_ui  apex_version.js  app_ui  libraries  themes

[oracle@ordsmcp ~]$ 


取り出したimagesを/home/oracle/apex/imagesに上書きして、パッチで修正されたファイルに置き換えます。

cp -r 37366599/images/* apex/images

[oracle@ordsmcp ~]$ cp -r 37366599/images/* apex/images

[oracle@ordsmcp ~]$ 


以上でパッチの適用は完了です。


CDNの参照



Oracle APEXの静的ファイルをCDNから参照することで、データベースへの負荷を削減できます。

APEXのダウンロード・ページに、パッチごとのCDNの参照先が記載されています。



データベースのコンテナapex-dbに接続して、IMAGE_PREFIXを更新します。

24.2.14の場合、以下のコマンドを実行します。

exec apex_instance_admin.set_parameter('IMAGE_PREFIX','https://static.oracle.com/cdn/apex/24.2.14/');

[oracle@ordsmcp ~]$ podman exec -it apex-db bash

bash-4.4$ sqlplus / as sysdba


SQL*Plus: Release 23.26.1.0.0 - Production on Wed Feb 25 07:10:55 2026

Version 23.26.1.0.0


Copyright (c) 1982, 2025, Oracle.  All rights reserved.



Connected to:

Oracle AI Database 26ai Free Release 23.26.1.0.0 - Develop, Learn, and Run for Free

Version 23.26.1.0.0


SQL> alter session set container = freepdb1;


Session altered.


SQL> exec apex_instance_admin.set_parameter('IMAGE_PREFIX','https://static.oracle.com/cdn/apex/24.2.14/');


PL/SQL procedure successfully completed.


SQL> commit;


Commit complete.


SQL> exit

Disconnected from Oracle AI Database 26ai Free Release 23.26.1.0.0 - Develop, Learn, and Run for Free

Version 23.26.1.0.0

bash-4.4$ 


CDNを参照する様に変更すると、/etc/nginx/default.d/06-apex-static-files.confは不要です。リバース・プロキシの対象から外すことができます。

rm /etc/nginx/default.d/60-apex-static-files.conf
systemctl restart nginx


[root@ordsmcp opc]# rm /etc/nginx/default.d/60-apex-static-files.conf 

rm: remove regular file '/etc/nginx/default.d/60-apex-static-files.conf'? yes

[root@ordsmcp opc]# systemctl restart nginx

[root@ordsmcp opc]# 


もし、リモートで実行されているデータベースにsqlplusまたはSQLclで接続可能で、さらにCDNを参照するように構成するのであれば、パッチの適用はリモートから実施できます。パッチのZIPファイルをリモートのインスタンスやコンテナにアップロードする必要はありません。

パッチを解凍したディレクトリへ移動し、SQLclでデータベースに接続します。

export NLS_LANG=American_America.AL32UTF8
sql sys/[パスワード]@ホスト名/freepdb1 as sysdba

37366599 % export NLS_LANG=American_America.AL32UTF8

37366599 % sql sys/******@ords.example.com/freepdb1 as sysdba


SQLcl: 水 2月 25 21:41:29 2026のリリース25.4 Production


Copyright (c) 1982, 2026, Oracle.  All rights reserved.


接続先:

Oracle AI Database 26ai Free Release 23.26.1.0.0 - Develop, Learn, and Run for Free

Version 23.26.1.0.0


SQL>


catpatch.sqlの実行とIMAGE_PREFIXの設定を行います。

@catpatch
exec apex_instance_admin.set_parameter('IMAGE_PREFIX','https://static.oracle.com/cdn/apex/24.2.14/');
commit;
exit

SQL> @catpatch

sqlclではTimingコマンドは廃止されました。

SET TIMING ONとSET TIMING OFFを使用してください。


. ORACLE

.

. Oracle APEX 24.2.%

. Patch Set Exception 37366599

........................................


APEX_VERSION    APEX_SCHEMA    

_______________ ______________ 

24.2.0          APEX_240200    



PL/SQLプロシージャが正常に完了しました。



Sessionが変更されました。



APEX_SCHEMA    

______________ 

APEX_240200    



PL/SQLプロシージャが正常に完了しました。


... Syncing with Post-Upgrade Job


[中略]


...Validating APEX

...(12:48:27) Starting validate_apex for APEX_240200

...(12:48:27) Checking missing privileges for APEX_240200

...(12:48:27) Checking missing privileges for APEX_GRANTS_FOR_NEW_USERS_ROLE

...(12:48:27) Re-generating APEX_240200.wwv_flow_db_version

... wwv_flow_db_version is up to date

...(12:48:27) Checking for sys.wwv_flow_cu_constraints

...(12:48:27) Checking invalid public synonyms

...(12:48:27) Key object existence check

...(12:48:28) Post-ORDS updates

...(12:48:28) calling wwv_util_apex_240200.post_ords_upgrade

...enabled_schema

...define_module

...define_template

...define_handler

...set_module_origins_allowed

...(12:48:28) Setting DBMS Registry for APEX to valid

...(12:48:28) Exiting validate_apex



PL/SQLプロシージャが正常に完了しました。


...Recompiling invalid public synonyms


PL/SQLプロシージャが正常に完了しました。



PL/SQLプロシージャが正常に完了しました。


sqlclではTimingコマンドは廃止されました。

SET TIMING ONとSET TIMING OFFを使用してください。

Oracle AI Database 26ai Free Release 23.26.1.0.0 - Develop, Learn, and Run for Free

Version 23.26.1.0.0から切断されました

37366599 % sql sys/********@ords.example.com/freepdb1 as sysdba


SQLcl: 水 2月 25 21:49:09 2026のリリース25.4 Production


Copyright (c) 1982, 2026, Oracle.  All rights reserved.


接続先:

Oracle AI Database 26ai Free Release 23.26.1.0.0 - Develop, Learn, and Run for Free

Version 23.26.1.0.0


SQL> exec apex_instance_admin.set_parameter('IMAGE_PREFIX','https://static.oracle.com/cdn/apex/24.2.14/');


PL/SQLプロシージャが正常に完了しました。


SQL> commit;


コミットが完了しました。


SQL> exit

Oracle AI Database 26ai Free Release 23.26.1.0.0 - Develop, Learn, and Run for Free

Version 23.26.1.0.0から切断されました

37366599 % 


CDNの利用を前提とすると、APEXのインストール自体もリモートから実施可能です。ただし、メディアをアップロードした方が、インストールもパッチの適用も、はるかに速く実行されます。