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

Reroute home page to FEM #372

Merged
merged 8 commits into from
Sep 16, 2024
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
4 changes: 3 additions & 1 deletion Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,9 @@ ADD nginx.conf /etc/nginx/nginx.conf
ADD nginx-redirects.conf /etc/nginx/redirects.conf
ADD nginx-proxy.conf /etc/nginx/proxy.conf
ADD nginx-proxy-security-headers.conf /etc/nginx/proxy-security-headers.conf
ADD nginx-fem-redirects.conf /etc/nginx/fem-redirects.conf
ADD nginx-fem-project-redirects.conf /etc/nginx/fem-project-redirects.conf
ADD nginx-pfe-redirects.conf /etc/nginx/pfe-redirects.conf
ADD nginx-pfe-staging-redirects.conf /etc/nginx/pfe-staging-redirects.conf
ADD nginx-fem-staging-redirects.conf /etc/nginx/fem-staging-redirects.conf
ADD nginx-s3-proxy-headers.conf /etc/nginx/s3-proxy-headers.conf
ADD nginx-az-proxy-headers.conf /etc/nginx/az-proxy-headers.conf
Expand Down
41 changes: 0 additions & 41 deletions nginx-fem-redirects.conf → nginx-fem-project-redirects.conf
Original file line number Diff line number Diff line change
@@ -1,47 +1,6 @@
set $fe_project_uri "https://fe-project.zooniverse.org";
set $fe_content_pages_uri "https://fe-content-pages.zooniverse.org";
set $fe_root_uri "https://fe-root.zooniverse.org";
set $fe_project_host "fe-project.zooniverse.org";
set $fe_content_pages_host "fe-content-pages.zooniverse.org";
set $fe_root_host "fe-root.zooniverse.org";

# Project app data and static files
location ~* ^/projects/(?:_next|assets)/.+?$ {
resolver 1.1.1.1;
proxy_pass $fe_project_uri;
proxy_set_header Host $fe_project_host;

include /etc/nginx/proxy-security-headers.conf;
}

# Root app data and static files
location ~* ^/(?:_next|assets)/.+?$ {
resolver 1.1.1.1;
proxy_pass $fe_root_uri;
proxy_set_header Host $fe_root_host;

include /etc/nginx/proxy-security-headers.conf;
}

# Zooniverse About pages, prefix match
location /about {
resolver 1.1.1.1;
proxy_pass $fe_root_uri;
proxy_set_header Host $fe_root_host;

include /etc/nginx/proxy-security-headers.conf;
}

# Zooniverse Get Involved pages, prefix match
location /get-involved {
resolver 1.1.1.1;
proxy_pass $fe_root_uri;
proxy_set_header Host $fe_root_host;

include /etc/nginx/proxy-security-headers.conf;
}

# FEM projects
location ~* ^/projects/(?:[\w-]*?/)?zookeeper/galaxy-zoo-weird-and-wonderful/?(?:(classify|about)(?:/.+?)?)?/?$ {
resolver 1.1.1.1;
proxy_pass $fe_project_uri;
Expand Down
75 changes: 75 additions & 0 deletions nginx-pfe-redirects.conf
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
set $proxy_path "www.zooniverse.org";

# FEM project assets
Copy link
Member

Choose a reason for hiding this comment

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

Does the ordering of this directive, above and separate from the rest of the projects/ pieces (starting on L37), matter?

Copy link
Member Author

@zwolf zwolf Sep 13, 2024

Choose a reason for hiding this comment

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

Yeah, the ordering is important in that it's gotta be before the other projects matcher. And though I grouped it with the other asset matcher, it could be moved further down.

In this case, before matching with ~* ^/projects, I want to check for FEM assets (the assets and _next folders) and return them first as they're exceptions to the exceptions. I could switch the latter to a prefix matcher since they have a lower priority than regex matches, but this way seems more obvious: match ^/projects plus those folders explicitly and route to FEM, or match just ^/projects and point to PFE.

The FEM project redirects file itself is included first for the same reason.

location ~* ^/projects/(?:_next|assets)/.+?$ {
resolver 1.1.1.1;
proxy_pass "https://fe-project.zooniverse.org";
proxy_set_header Host fe-project.zooniverse.org;

include /etc/nginx/proxy-security-headers.conf;
}

# PFE assets
location ~ ^/[\w-]+\.(js|css)$ {
resolver 1.1.1.1;
proxy_pass https://zooniversestatic.z13.web.core.windows.net/$proxy_path$request_uri;
include /etc/nginx/az-proxy-headers.conf;
}

# User profile page
location ~* ^/users/[\w-]+/?$ {
rewrite (?i)\.(jp(e)?g|gif|png|ico|txt|mp(3|4)|webm|og(a|g|m|v|x)|spx|opus|pdf|ttf|tar|gz|tgz|bz2|tbz2|zip)$ https://static.zooniverse.org/$proxy_path$request_uri;

resolver 1.1.1.1;
proxy_pass https://zooniversestatic.z13.web.core.windows.net/$proxy_path/;
include /etc/nginx/az-proxy-headers.conf;
}

# User specific pages
location ~* ^/users/[\w-]+/((collections|favorites|message)?)/?$ {
rewrite (?i)\.(jp(e)?g|gif|png|ico|txt|mp(3|4)|webm|og(a|g|m|v|x)|spx|opus|pdf|ttf|tar|gz|tgz|bz2|tbz2|zip)$ https://static.zooniverse.org/$proxy_path$request_uri;

resolver 1.1.1.1;
proxy_pass https://zooniversestatic.z13.web.core.windows.net/$proxy_path/;
include /etc/nginx/az-proxy-headers.conf;
}

# Default: /project/* to PFE
# Can be overridden by directives in nginx-project-redirects.conf
location ~* ^/projects {
rewrite (?i)\.(jp(e)?g|gif|png|ico|txt|mp(3|4)|webm|og(a|g|m|v|x)|spx|opus|pdf|ttf|tar|gz|tgz|bz2|tbz2|zip)$ https://static.zooniverse.org/$proxy_path$request_uri;

resolver 1.1.1.1;
proxy_pass https://zooniversestatic.z13.web.core.windows.net/$proxy_path/;
include /etc/nginx/az-proxy-headers.conf;
}

# Most of the main PFE redirects
location ~* ^/(organizations|collections|favorites|talk|notifications|inbox|lab|admin|accounts|reset-password|settings|privacy|security|youth_privacy) {
rewrite (?i)\.(jp(e)?g|gif|png|ico|txt|mp(3|4)|webm|og(a|g|m|v|x)|spx|opus|pdf|ttf|tar|gz|tgz|bz2|tbz2|zip)$ https://static.zooniverse.org/$proxy_path$request_uri;

resolver 1.1.1.1;
proxy_pass https://zooniversestatic.z13.web.core.windows.net/$proxy_path/;
include /etc/nginx/az-proxy-headers.conf;
}

# unsubscribe route uses redirects between panoptes and the UI code
# so needs it's own location block to handle the form submission POST
# and the GET page loading (PFE routing handles the path)
location /unsubscribe {
rewrite (?i)\.(jp(e)?g|gif|png|ico|txt|mp(3|4)|webm|og(a|g|m|v|x)|spx|opus|pdf|ttf|tar|gz|tgz|bz2|tbz2|zip)$ https://static.zooniverse.org/$proxy_path$request_uri;

resolver 1.1.1.1;
if ($request_method ~ ^(GET|HEAD)$) {
proxy_pass https://zooniversestatic.z13.web.core.windows.net/$proxy_path/;
set $proxy_host_header "zooniversestatic.z13.web.core.windows.net";
}
if ($request_method = POST) {
proxy_pass https://panoptes.zooniverse.org$request_uri;
set $proxy_host_header "panoptes.zooniverse.org";
}
proxy_set_header Host $proxy_host_header;
proxy_redirect /$host/ /;

include /etc/nginx/az-proxy-headers.conf;
}
84 changes: 84 additions & 0 deletions nginx-pfe-staging-redirects.conf
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
set $proxy_path "www.zooniverse.org";

# FEM project assets
location ~* ^/projects/(?:_next|assets)/.+?$ {
resolver 1.1.1.1;
proxy_pass "https://fe-project.preview.zooniverse.org";
proxy_set_header Host fe-project.preview.zooniverse.org;

include /etc/nginx/proxy-security-headers.conf;
}

# PFE assets
location ~ \.(js|css)$ {
resolver 1.1.1.1;
proxy_pass https://zooniversestatic.z13.web.core.windows.net/$proxy_path$request_uri;
include /etc/nginx/az-proxy-headers.conf;
}

# User profile page
location ~* ^/users/[\w-]+/?$ {
rewrite (?i)\.(jp(e)?g|gif|png|ico|txt|mp(3|4)|webm|og(a|g|m|v|x)|spx|opus|pdf|ttf|tar|gz|tgz|bz2|tbz2|zip)$ https://static.zooniverse.org/$proxy_path$request_uri;

resolver 1.1.1.1;
proxy_pass https://zooniversestatic.z13.web.core.windows.net/$proxy_path/;
include /etc/nginx/az-proxy-headers.conf;
}

# User specific pages
location ~* ^/users/[\w-]+/((collections|favorites|message)?)/?$ {
rewrite (?i)\.(jp(e)?g|gif|png|ico|txt|mp(3|4)|webm|og(a|g|m|v|x)|spx|opus|pdf|ttf|tar|gz|tgz|bz2|tbz2|zip)$ https://static.zooniverse.org/$proxy_path$request_uri;

resolver 1.1.1.1;
proxy_pass https://zooniversestatic.z13.web.core.windows.net/$proxy_path/;
include /etc/nginx/az-proxy-headers.conf;
}

# Default: /project/* to PFE
# Can be overridden by directives in nginx-project-redirects.conf
location ~* ^/projects {
rewrite (?i)\.(jp(e)?g|gif|png|ico|txt|mp(3|4)|webm|og(a|g|m|v|x)|spx|opus|pdf|ttf|tar|gz|tgz|bz2|tbz2|zip)$ https://static.zooniverse.org/$proxy_path$request_uri;

resolver 1.1.1.1;
proxy_pass https://zooniversestatic.z13.web.core.windows.net/$proxy_path/;
include /etc/nginx/az-proxy-headers.conf;
}

# Most of the main PFE redirects
location ~* ^/(organizations|collections|favorites|talk|notifications|inbox|lab|admin|accounts|reset-password|settings|privacy|security|youth_privacy) {
rewrite (?i)\.(jp(e)?g|gif|png|ico|txt|mp(3|4)|webm|og(a|g|m|v|x)|spx|opus|pdf|ttf|tar|gz|tgz|bz2|tbz2|zip)$ https://static.zooniverse.org/$proxy_path$request_uri;

resolver 1.1.1.1;
proxy_pass https://zooniversestatic.z13.web.core.windows.net/$proxy_path/;
include /etc/nginx/az-proxy-headers.conf;
}

# unsubscribe route uses redirects between panoptes and the UI code
# so needs it's own location block to handle the form submission POST
# and the GET page loading (PFE routing handles the path)
location /unsubscribe {
rewrite (?i)\.(jp(e)?g|gif|png|ico|txt|mp(3|4)|webm|og(a|g|m|v|x)|spx|opus|pdf|ttf|tar|gz|tgz|bz2|tbz2|zip)$ https://static.zooniverse.org/$proxy_path$request_uri;

resolver 1.1.1.1;
if ($request_method ~ ^(GET|HEAD)$) {
proxy_pass https://zooniversestatic.z13.web.core.windows.net/$proxy_path/;
set $proxy_host_header "zooniversestatic.z13.web.core.windows.net";
}
if ($request_method = POST) {
proxy_pass https://panoptes.zooniverse.org$request_uri;
set $proxy_host_header "panoptes.zooniverse.org";
}
proxy_set_header Host $proxy_host_header;
proxy_redirect /$host/ /;

include /etc/nginx/az-proxy-headers.conf;
}

# Example FEM project redirect
location ~* ^/projects/(?:[\w-]*?/)?brooke/i-fancy-cats/?(?:(classify|about)(?:/.+?)?)?/?$ {
resolver 1.1.1.1;
proxy_pass "https://fe-project.preview.zooniverse.org";
Copy link
Member

Choose a reason for hiding this comment

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

Just flagging one specific case to ask a syntax question: should direct assignment of proxy_pass URLs be written without double quotes (this one here uses quotes, as do a few other places in this PR). Acknowledging and guessing it probably doesn't matter, but wanted to check.

Copy link
Member Author

Choose a reason for hiding this comment

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

As far as I know it doesn't matter and we're just kind of inconsistent in this repo. You need quotes to avoid escaping certain characters but otherwise it works either way.

proxy_set_header Host fe-project.preview.zooniverse.org;

include /etc/nginx/proxy-security-headers.conf;
}
39 changes: 5 additions & 34 deletions sites/frontend.preview.zooniverse.org.conf
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
server {
set $proxy_path "www.zooniverse.org";
include /etc/nginx/ssl.default.conf;
include /etc/nginx/fem-staging-redirects.conf;
include /etc/nginx/pfe-staging-redirects.conf;
server_name frontend.preview.zooniverse.org;

rewrite ^/lab-policies$ https://help.zooniverse.org/getting-started/lab-policies permanent;
Expand Down Expand Up @@ -92,40 +91,12 @@ server {
return 301 /projects/laac-lscp/maturity-of-baby-sounds$1$2$is_args$query_string;
}

# ensure the js and CSS assets are served on the same or subdomain
location ~ \.(js|css)$ {
resolver 1.1.1.1;
proxy_pass https://zooniversestatic.z13.web.core.windows.net/$proxy_path$request_uri;
include /etc/nginx/az-proxy-headers.conf;
}

# unsubscribe route uses redirects between panoptes and the UI code
# so needs it's own location block to handle the form submission POST
# and the GET page loading (PFE routing handles the path)
location /unsubscribe {
rewrite (?i)\.(jp(e)?g|gif|png|ico|txt|mp(3|4)|webm|og(a|g|m|v|x)|spx|opus|pdf|ttf|tar|gz|tgz|bz2|tbz2|zip)$ https://static.zooniverse.org/$proxy_path$request_uri;

resolver 1.1.1.1;
if ($request_method ~ ^(GET|HEAD)$) {
proxy_pass https://zooniversestatic.z13.web.core.windows.net/$proxy_path/;
set $proxy_host_header "zooniversestatic.z13.web.core.windows.net";
}
if ($request_method = POST) {
proxy_pass https://panoptes.zooniverse.org$request_uri;
set $proxy_host_header "panoptes.zooniverse.org";
}
proxy_set_header Host $proxy_host_header;
proxy_redirect /$host/ /;

include /etc/nginx/az-proxy-headers.conf;
}

# fe-root staging app
location / {
rewrite (?i)\.(jp(e)?g|gif|png|ico|txt|mp(3|4)|webm|og(a|g|m|v|x)|spx|opus|pdf|ttf|tar|gz|tgz|bz2|tbz2|zip)$ https://static.zooniverse.org/$proxy_path$request_uri;

resolver 1.1.1.1;
proxy_pass https://zooniversestatic.z13.web.core.windows.net/$proxy_path/;
proxy_pass "https://fe-root.preview.zooniverse.org";
proxy_set_header Host fe-root.preview.zooniverse.org;

include /etc/nginx/az-proxy-headers.conf;
include /etc/nginx/proxy-security-headers.conf;
}
}
59 changes: 5 additions & 54 deletions sites/static-staging.zooniverse.org.conf
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
server {
set $proxy_path "www.zooniverse.org";
include /etc/nginx/ssl.default.conf;
include /etc/nginx/fem-staging-redirects.conf;
include /etc/nginx/pfe-staging-redirects.conf;
server_name static-staging.zooniverse.org;

rewrite ^/lab-policies$ https://help.zooniverse.org/getting-started/lab-policies permanent;
Expand Down Expand Up @@ -72,60 +71,12 @@ server {
return 301 /about/contact;
}

location ~* ^/projects/meredithspalmer/(cedar-creek-eyes-on-the-wild/?)(.*?)\/?$ {
return 301 /projects/forestis/$1$2$is_args$query_string;
}

location ~* ^/projects/karilint/the-cradle-of-mankind(/?)(.*?)\/?$ {
return 301 /projects/karilint/cradle-of-humanity$1$2$is_args$query_string;
}

location ~* ^/projects/cseidenstuecker/every-name-counts(/?)(.*?)\/?$ {
return 301 /projects/arolsen-archives/every-name-counts$1$2$is_args$query_string;
}

location ~* ^/projects/kevinesolberg/mapping-prejudice(/?)(.*?)\/?$ {
return 301 /projects/mappingprejudice/mapping-prejudice$1$2$is_args$query_string;
}

location ~* ^/projects/chiarasemenzin/maturity-of-baby-sounds(/?)(.*?)\/?$ {
return 301 /projects/laac-lscp/maturity-of-baby-sounds$1$2$is_args$query_string;
}

# ensure the js and CSS assets are served on the same or subdomain
location ~ \.(js|css)$ {
resolver 1.1.1.1;
proxy_pass https://zooniversestatic.z13.web.core.windows.net/$proxy_path$request_uri;
include /etc/nginx/az-proxy-headers.conf;
}

# unsubscribe route uses redirects between panoptes and the UI code
# so needs it's own location block to handle the form submission POST
# and the GET page loading (PFE routing handles the path)
location /unsubscribe {
rewrite (?i)\.(jp(e)?g|gif|png|ico|txt|mp(3|4)|webm|og(a|g|m|v|x)|spx|opus|pdf|ttf|tar|gz|tgz|bz2|tbz2|zip)$ https://static.zooniverse.org/$proxy_path$request_uri;

resolver 1.1.1.1;
if ($request_method ~ ^(GET|HEAD)$) {
proxy_pass https://zooniversestatic.z13.web.core.windows.net/$proxy_path/;
set $proxy_host_header "zooniversestatic.z13.web.core.windows.net";
}
if ($request_method = POST) {
proxy_pass https://panoptes.zooniverse.org$request_uri;
set $proxy_host_header "panoptes.zooniverse.org";
}
proxy_set_header Host $proxy_host_header;
proxy_redirect /$host/ /;

include /etc/nginx/az-proxy-headers.conf;
}

# fe-root staging app
location / {
rewrite (?i)\.(jp(e)?g|gif|png|ico|txt|mp(3|4)|webm|og(a|g|m|v|x)|spx|opus|pdf|ttf|tar|gz|tgz|bz2|tbz2|zip)$ https://static.zooniverse.org/$proxy_path$request_uri;

resolver 1.1.1.1;
proxy_pass https://zooniversestatic.z13.web.core.windows.net/$proxy_path/;
proxy_pass "https://fe-root.preview.zooniverse.org";
proxy_set_header Host fe-root.preview.zooniverse.org;

include /etc/nginx/az-proxy-headers.conf;
include /etc/nginx/proxy-security-headers.conf;
}
}
Loading