Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Improved maintenance page handling of 503 errors [release_2.0] #2202

Merged
merged 3 commits into from
Aug 4, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 16 additions & 4 deletions ood-portal-generator/spec/fixtures/ood-portal.conf.all
Original file line number Diff line number Diff line change
Expand Up @@ -70,12 +70,10 @@ Listen 8080
RewriteEngine On
RewriteCond /var/www/configured/public/maintenance/index.html -f
RewriteCond /etc/ood/maintenance.enable -f
RewriteCond %{REQUEST_URI} !/public/maintenance/.*$
RewriteCond %{REQUEST_URI} !/assets/maintenance/.*$
RewriteCond %{REMOTE_ADDR} !^192\.168\.0\..*
RewriteCond %{REMOTE_ADDR} !^192\.168\.1\..*
RewriteRule ^.*$ /assets/maintenance/index.html [R=503,L]
ErrorDocument 503 /assets/maintenance/index.html
Header Set Cache-Control "max-age=0, no-store"
RewriteRule ^.*$ /assets/maintenance/index.html [R=302,L]

Header always set Content-Security-Policy "frame-ancestors https://test.server.name;"
Header always set Strict-Transport-Security "max-age=63072000; includeSubDomains; preload"
Expand Down Expand Up @@ -233,6 +231,20 @@ Listen 8080
Require valid-user
</Location>

# Maintenance location
#
# https://test.server.name:8080/assets/maintenance
# #=> Displays /var/www/configured/public/maintenance/index.html
#
<Directory "/var/www/configured/public/maintenance">
RewriteCond /etc/ood/maintenance.enable !-f
ReWriteRule ^.*$ /

RewriteCond %{REQUEST_URI} !/assets/maintenance/index\.html$
RewriteRule ^.*$ /assets/maintenance/index.html [R=503,L]
ErrorDocument 503 /assets/maintenance/index.html
</Directory>

# Discover URI for OpenID Connect (used for multiple Id Providers):
#
# https://test.server.name:8080/discover
Expand Down
18 changes: 15 additions & 3 deletions ood-portal-generator/spec/fixtures/ood-portal.conf.default
Original file line number Diff line number Diff line change
Expand Up @@ -53,9 +53,7 @@
RewriteCond /var/www/ood/public/maintenance/index.html -f
RewriteCond /etc/ood/maintenance.enable -f
RewriteCond %{REQUEST_URI} !/public/maintenance/.*$
RewriteRule ^.*$ /public/maintenance/index.html [R=503,L]
ErrorDocument 503 /public/maintenance/index.html
Header Set Cache-Control "max-age=0, no-store"
RewriteRule ^.*$ /public/maintenance/index.html [R=302,L]

Header always set Content-Security-Policy "frame-ancestors http://example.com;"

Expand Down Expand Up @@ -147,5 +145,19 @@
Redirect "/logout" "/pun/sys/dashboard/logout"


# Maintenance location
#
# http://localhost:80/public/maintenance
# #=> Displays /var/www/ood/public/maintenance/index.html
#
<Directory "/var/www/ood/public/maintenance">
RewriteCond /etc/ood/maintenance.enable !-f
ReWriteRule ^.*$ /

RewriteCond %{REQUEST_URI} !/public/maintenance/index\.html$
RewriteRule ^.*$ /public/maintenance/index.html [R=503,L]
ErrorDocument 503 /public/maintenance/index.html
</Directory>


</VirtualHost>
18 changes: 15 additions & 3 deletions ood-portal-generator/spec/fixtures/ood-portal.conf.dex
Original file line number Diff line number Diff line change
Expand Up @@ -53,9 +53,7 @@
RewriteCond /var/www/ood/public/maintenance/index.html -f
RewriteCond /etc/ood/maintenance.enable -f
RewriteCond %{REQUEST_URI} !/public/maintenance/.*$
RewriteRule ^.*$ /public/maintenance/index.html [R=503,L]
ErrorDocument 503 /public/maintenance/index.html
Header Set Cache-Control "max-age=0, no-store"
RewriteRule ^.*$ /public/maintenance/index.html [R=302,L]

Header always set Content-Security-Policy "frame-ancestors http://example.com;"

Expand Down Expand Up @@ -170,5 +168,19 @@
Require valid-user
</Location>

# Maintenance location
#
# http://localhost:80/public/maintenance
# #=> Displays /var/www/ood/public/maintenance/index.html
#
<Directory "/var/www/ood/public/maintenance">
RewriteCond /etc/ood/maintenance.enable !-f
ReWriteRule ^.*$ /

RewriteCond %{REQUEST_URI} !/public/maintenance/index\.html$
RewriteRule ^.*$ /public/maintenance/index.html [R=503,L]
ErrorDocument 503 /public/maintenance/index.html
</Directory>


</VirtualHost>
18 changes: 15 additions & 3 deletions ood-portal-generator/spec/fixtures/ood-portal.conf.dex-full
Original file line number Diff line number Diff line change
Expand Up @@ -65,9 +65,7 @@
RewriteCond /var/www/ood/public/maintenance/index.html -f
RewriteCond /etc/ood/maintenance.enable -f
RewriteCond %{REQUEST_URI} !/public/maintenance/.*$
RewriteRule ^.*$ /public/maintenance/index.html [R=503,L]
ErrorDocument 503 /public/maintenance/index.html
Header Set Cache-Control "max-age=0, no-store"
RewriteRule ^.*$ /public/maintenance/index.html [R=302,L]

Header always set Content-Security-Policy "frame-ancestors https://example.com;"
Header always set Strict-Transport-Security "max-age=63072000; includeSubDomains; preload"
Expand Down Expand Up @@ -188,5 +186,19 @@
Require valid-user
</Location>

# Maintenance location
#
# https://example.com:443/public/maintenance
# #=> Displays /var/www/ood/public/maintenance/index.html
#
<Directory "/var/www/ood/public/maintenance">
RewriteCond /etc/ood/maintenance.enable !-f
ReWriteRule ^.*$ /

RewriteCond %{REQUEST_URI} !/public/maintenance/index\.html$
RewriteRule ^.*$ /public/maintenance/index.html [R=503,L]
ErrorDocument 503 /public/maintenance/index.html
</Directory>


</VirtualHost>
18 changes: 15 additions & 3 deletions ood-portal-generator/spec/fixtures/ood-portal.conf.dex-ldap
Original file line number Diff line number Diff line change
Expand Up @@ -65,9 +65,7 @@
RewriteCond /var/www/ood/public/maintenance/index.html -f
RewriteCond /etc/ood/maintenance.enable -f
RewriteCond %{REQUEST_URI} !/public/maintenance/.*$
RewriteRule ^.*$ /public/maintenance/index.html [R=503,L]
ErrorDocument 503 /public/maintenance/index.html
Header Set Cache-Control "max-age=0, no-store"
RewriteRule ^.*$ /public/maintenance/index.html [R=302,L]

Header always set Content-Security-Policy "frame-ancestors https://example.com;"
Header always set Strict-Transport-Security "max-age=63072000; includeSubDomains; preload"
Expand Down Expand Up @@ -188,5 +186,19 @@
Require valid-user
</Location>

# Maintenance location
#
# https://example.com:443/public/maintenance
# #=> Displays /var/www/ood/public/maintenance/index.html
#
<Directory "/var/www/ood/public/maintenance">
RewriteCond /etc/ood/maintenance.enable !-f
ReWriteRule ^.*$ /

RewriteCond %{REQUEST_URI} !/public/maintenance/index\.html$
RewriteRule ^.*$ /public/maintenance/index.html [R=503,L]
ErrorDocument 503 /public/maintenance/index.html
</Directory>


</VirtualHost>
18 changes: 15 additions & 3 deletions ood-portal-generator/spec/fixtures/ood-portal.conf.dex-proxy
Original file line number Diff line number Diff line change
Expand Up @@ -65,9 +65,7 @@
RewriteCond /var/www/ood/public/maintenance/index.html -f
RewriteCond /etc/ood/maintenance.enable -f
RewriteCond %{REQUEST_URI} !/public/maintenance/.*$
RewriteRule ^.*$ /public/maintenance/index.html [R=503,L]
ErrorDocument 503 /public/maintenance/index.html
Header Set Cache-Control "max-age=0, no-store"
RewriteRule ^.*$ /public/maintenance/index.html [R=302,L]

Header always set Content-Security-Policy "frame-ancestors https://example.com;"
Header always set Strict-Transport-Security "max-age=63072000; includeSubDomains; preload"
Expand Down Expand Up @@ -194,5 +192,19 @@
Require valid-user
</Location>

# Maintenance location
#
# https://example.com:443/public/maintenance
# #=> Displays /var/www/ood/public/maintenance/index.html
#
<Directory "/var/www/ood/public/maintenance">
RewriteCond /etc/ood/maintenance.enable !-f
ReWriteRule ^.*$ /

RewriteCond %{REQUEST_URI} !/public/maintenance/index\.html$
RewriteRule ^.*$ /public/maintenance/index.html [R=503,L]
ErrorDocument 503 /public/maintenance/index.html
</Directory>


</VirtualHost>
18 changes: 15 additions & 3 deletions ood-portal-generator/spec/fixtures/ood-portal.conf.maint_with_ips
Original file line number Diff line number Diff line change
Expand Up @@ -55,9 +55,7 @@
RewriteCond %{REQUEST_URI} !/public/maintenance/.*$
RewriteCond %{REMOTE_ADDR} !^192\.168\.1\..*
RewriteCond %{REMOTE_ADDR} !^10\.0\.0\..*
RewriteRule ^.*$ /public/maintenance/index.html [R=503,L]
ErrorDocument 503 /public/maintenance/index.html
Header Set Cache-Control "max-age=0, no-store"
RewriteRule ^.*$ /public/maintenance/index.html [R=302,L]

Header always set Content-Security-Policy "frame-ancestors http://example.com;"

Expand Down Expand Up @@ -149,5 +147,19 @@
Redirect "/logout" "/pun/sys/dashboard/logout"


# Maintenance location
#
# http://localhost:80/public/maintenance
# #=> Displays /var/www/ood/public/maintenance/index.html
#
<Directory "/var/www/ood/public/maintenance">
RewriteCond /etc/ood/maintenance.enable !-f
ReWriteRule ^.*$ /

RewriteCond %{REQUEST_URI} !/public/maintenance/index\.html$
RewriteRule ^.*$ /public/maintenance/index.html [R=503,L]
ErrorDocument 503 /public/maintenance/index.html
</Directory>


</VirtualHost>
1 change: 0 additions & 1 deletion ood-portal-generator/spec/fixtures/ood-portal.conf.nomaint
Original file line number Diff line number Diff line change
Expand Up @@ -138,5 +138,4 @@
Redirect "/logout" "/pun/sys/dashboard/logout"



</VirtualHost>
18 changes: 15 additions & 3 deletions ood-portal-generator/spec/fixtures/ood-portal.conf.oidc
Original file line number Diff line number Diff line change
Expand Up @@ -57,9 +57,7 @@
RewriteCond /var/www/ood/public/maintenance/index.html -f
RewriteCond /etc/ood/maintenance.enable -f
RewriteCond %{REQUEST_URI} !/public/maintenance/.*$
RewriteRule ^.*$ /public/maintenance/index.html [R=503,L]
ErrorDocument 503 /public/maintenance/index.html
Header Set Cache-Control "max-age=0, no-store"
RewriteRule ^.*$ /public/maintenance/index.html [R=302,L]

Header always set Content-Security-Policy "frame-ancestors http://ondemand.example.com;"

Expand Down Expand Up @@ -178,5 +176,19 @@
Require valid-user
</Location>

# Maintenance location
#
# http://ondemand.example.com:80/public/maintenance
# #=> Displays /var/www/ood/public/maintenance/index.html
#
<Directory "/var/www/ood/public/maintenance">
RewriteCond /etc/ood/maintenance.enable !-f
ReWriteRule ^.*$ /

RewriteCond %{REQUEST_URI} !/public/maintenance/index\.html$
RewriteRule ^.*$ /public/maintenance/index.html [R=503,L]
ErrorDocument 503 /public/maintenance/index.html
</Directory>


</VirtualHost>
18 changes: 15 additions & 3 deletions ood-portal-generator/spec/fixtures/ood-portal.conf.oidc-ssl
Original file line number Diff line number Diff line change
Expand Up @@ -65,9 +65,7 @@
RewriteCond /var/www/ood/public/maintenance/index.html -f
RewriteCond /etc/ood/maintenance.enable -f
RewriteCond %{REQUEST_URI} !/public/maintenance/.*$
RewriteRule ^.*$ /public/maintenance/index.html [R=503,L]
ErrorDocument 503 /public/maintenance/index.html
Header Set Cache-Control "max-age=0, no-store"
RewriteRule ^.*$ /public/maintenance/index.html [R=302,L]

Header always set Content-Security-Policy "frame-ancestors https://ondemand.example.com;"
Header always set Strict-Transport-Security "max-age=63072000; includeSubDomains; preload"
Expand Down Expand Up @@ -192,5 +190,19 @@
Require valid-user
</Location>

# Maintenance location
#
# https://ondemand.example.com:443/public/maintenance
# #=> Displays /var/www/ood/public/maintenance/index.html
#
<Directory "/var/www/ood/public/maintenance">
RewriteCond /etc/ood/maintenance.enable !-f
ReWriteRule ^.*$ /

RewriteCond %{REQUEST_URI} !/public/maintenance/index\.html$
RewriteRule ^.*$ /public/maintenance/index.html [R=503,L]
ErrorDocument 503 /public/maintenance/index.html
</Directory>


</VirtualHost>
18 changes: 15 additions & 3 deletions ood-portal-generator/spec/fixtures/ood-portal.dex-full.proxy.conf
Original file line number Diff line number Diff line change
Expand Up @@ -65,9 +65,7 @@
RewriteCond /var/www/ood/public/maintenance/index.html -f
RewriteCond /etc/ood/maintenance.enable -f
RewriteCond %{REQUEST_URI} !/public/maintenance/.*$
RewriteRule ^.*$ /public/maintenance/index.html [R=503,L]
ErrorDocument 503 /public/maintenance/index.html
Header Set Cache-Control "max-age=0, no-store"
RewriteRule ^.*$ /public/maintenance/index.html [R=302,L]

Header always set Content-Security-Policy "frame-ancestors https://example.com;"
Header always set Strict-Transport-Security "max-age=63072000; includeSubDomains; preload"
Expand Down Expand Up @@ -188,5 +186,19 @@
Require valid-user
</Location>

# Maintenance location
#
# https://example.com:443/public/maintenance
# #=> Displays /var/www/ood/public/maintenance/index.html
#
<Directory "/var/www/ood/public/maintenance">
RewriteCond /etc/ood/maintenance.enable !-f
ReWriteRule ^.*$ /

RewriteCond %{REQUEST_URI} !/public/maintenance/index\.html$
RewriteRule ^.*$ /public/maintenance/index.html [R=503,L]
ErrorDocument 503 /public/maintenance/index.html
</Directory>


</VirtualHost>
2 changes: 1 addition & 1 deletion ood-portal-generator/spec/fixtures/sum.default
Original file line number Diff line number Diff line change
@@ -1 +1 @@
e5891fae1abde47d878ecbda0edbed7a132afa7ea166ecdaecb2214547fe102d /opt/rh/httpd24/root/etc/httpd/conf.d/ood-portal.conf
5469faf1d24def9ce0693da1d892b39c17451904ce90d249f728970c5a9b8cbb /opt/rh/httpd24/root/etc/httpd/conf.d/ood-portal.conf
22 changes: 18 additions & 4 deletions ood-portal-generator/templates/ood-portal.conf.erb
Original file line number Diff line number Diff line change
Expand Up @@ -86,13 +86,11 @@ Listen <%= addr_port %>
RewriteEngine On
RewriteCond <%= @public_root %>/maintenance/index.html -f
RewriteCond /etc/ood/maintenance.enable -f
RewriteCond %{REQUEST_URI} !/public/maintenance/.*$
RewriteCond %{REQUEST_URI} !<%= @public_uri %>/maintenance/.*$
<%- @maintenance_ip_whitelist.each do |ip| -%>
RewriteCond %{REMOTE_ADDR} !^<%= escape_ip(ip) %>
<%- end -%>
RewriteRule ^.*$ <%= @public_uri %>/maintenance/index.html [R=503,L]
ErrorDocument 503 <%= @public_uri %>/maintenance/index.html
Header Set Cache-Control "max-age=0, no-store"
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We need to see how this behaves in 2.0. 2.1 already had this removed - but 2.0 didn't.

I keep deferring this test, but basically we want to be sure that the maintenance page isn't being cached forever in 2.1. By removing the Header Set Cache-Control are we running into a similar situation?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I just tested on webdev02. I removed the whitelist for VPN so I didn't have to disconnect. But I loaded OnDemand, touched maintenance.enable, reloaded (not full reload, just click refresh button) and got maintenance page then removed the enable and reloaded again and got dashboard.

So one thing I think this change might break is the URL for maintenance page goes from staying like /pun/sys/dashboard to being forced to /public/maintenance. So if a user refreshes, they won't go back to dashboard, they must modify URL. I think one way we could ease that issue is update maintenance page with very clear link to get back to OnDemand. We'd also need to update OSC's specific page as we override OOD default page.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I might have a solution in mind to fix the URL issue. I am building new nightlies for dev and will test.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

So tested on dev with nightly I just built for Gitlab, enable maintenance and get this:

https://ondemand-dev.osc.edu/public/maintenance/index.html

Added a few lines to maintenance directory

    RewriteCond /etc/ood/maintenance.enable !-f
    ReWriteRule ^.*$ /

Removed maintenance file and reloaded, back to OnDemand. I'll open 2.1 pull request and update this pull request.

RewriteRule ^.*$ <%= @public_uri %>/maintenance/index.html [R=302,L]

<%- end -%>
<%- if @security_csp_frame_ancestors -%>
Expand Down Expand Up @@ -323,7 +321,23 @@ Listen <%= addr_port %>
<%- end -%>
</Location>
<%- end -%>
<%- if @use_rewrites && @use_maintenance -%>

# Maintenance location
#
# <%= @ssl ? "https" : "http" %>://<%= @servername || "localhost" %>:<%= @port %><%= @public_uri %>/maintenance
# #=> Displays <%= @public_root %>/maintenance/index.html
#
<Directory "<%= @public_root %>/maintenance">
RewriteCond /etc/ood/maintenance.enable !-f
ReWriteRule ^.*$ /

RewriteCond %{REQUEST_URI} !<%= @public_uri %>/maintenance/index\.html$
RewriteRule ^.*$ <%= @public_uri %>/maintenance/index.html [R=503,L]
ErrorDocument 503 <%= @public_uri %>/maintenance/index.html
</Directory>

<%- end -%>
<%- if @oidc_discover_uri && @oidc_discover_root -%>
# Discover URI for OpenID Connect (used for multiple Id Providers):
#
Expand Down