Nginx - 运行 Wordpress 作为子域,另一个应用程序在主域上 运行
Nginx - Run Wordpress as subdomain where another app is running on main domain
我在主域是 运行 不同应用程序(Shiny 服务器)的子域中部署 Wordpress 时遇到问题。就题目而言,my-domain.com
是主域,我想部署Wordpress站点的位置是my-domain.com/blog
。这是我当前的配置文件(在 /etc/nginx/sites-available/my-domain.com
符号链接到启用站点):
server {
root /var/www/my-domain.com; # Wordpress directory
server_name my-domain.com www.my-domain.com;
index index.html index.htm index.nginx-debian.html index.php;
## Shiny server
location / {
proxy_pass http://MY_IP:SHINY_SERVER_PORT;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
## Wordpress subdomain location
location /blog {
try_files $uri $uri/ /index.php$is_args$args;
location ~ /\.ht {
deny all;
}
## Wordpress restrictions
location = /blog/favicon.ico { log_not_found off; access_log off; }
location = /blog/robots.txt { log_not_found off; access_log off; allow all; }
location ~* \.(css|gif|ico|jpeg|jpg|js|png)$ {
expires max;
log_not_found off;
}
}
## Added PHP config locations for MySQL/WP
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
}
## SSL configuration added by certbot
# listen [::]:443 ssl ipv6only=on; # commented out as the server is not ipv6
listen 443 ssl; # managed by Certbot
ssl_certificate /etc/letsencrypt/live/my-domain.com/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/my-domain.com/privkey.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
}
server {
if ($host = www.my-domain.com) {
return 301 https://$host$request_uri;
} # managed by Certbot
if ($host = my-domain.com) {
return 301 https://$host$request_uri;
} # managed by Certbot
listen 80;
listen [::]:80;
server_name my-domain.com www.my-domain.com;
return 404; # managed by Certbot
}
这个站点的前一个版本只是 Shiny 服务器,我对 运行 just 该应用程序在主域下的配置工作有相当的了解。作为参考,额外的位是基于 this tutorial 添加的。上面的配置在 my-domain.com
上运行 Shiny 服务器应用程序很好,但是当我导航到 my-domain.com/blog
时,出现以下“损坏”版本的 Wordpress:
我已经验证我也正确配置了 Wordpress:如果我注释掉 proxy_pass
到 proxy_set_header
行并将 try_files
行添加到主 location /
块并删除 location /blog
块)。我相信我的问题是对 var/www
目录的误解,对 php 的不了解,以及对 Nginx 整体的一般业余理解。我在这里做错了什么? This question 似乎接近完成我想要的,但在执行此操作后,my-domain.com/blog
下载一个 php 文件而不是加载任何内容。如果我可以提供任何其他信息,请告诉我 - 我不知所措。谢谢!
万一有人好奇,我想通了。我已经很接近了,但有几件事不对劲。
1.) Wordpress 文件位于 /var/www/my-domain.com
主目录中,但需要将它们移动到与我尝试将 Wordpress 移动到的扩展名对齐的相应子目录中。在这种情况下:/var/www/my-domain.com/blog
.
2.) 在此之后,我原来的问题中的 Nginx 配置需要更新如下:
发件人:
## Wordpress subdomain location
location /blog {
try_files $uri $uri/ /index.php$is_args$args;
收件人:
## Wordpress subdomain location
location /blog {
try_files $uri $uri/ /blog/index.php$is_args$args;
3.) 另外,我不确定这是否重要,但我原来的根目录设置为 /var/www/my-domain.com
,我将其更改为 /var/www/my-domain.com/
。这可能根本不重要,但这是我能看到的唯一不同之处。
事后看来,一些简单的事情确实是显而易见的,但我对 Nginx 的了解并不完全。无论如何,希望这对任何偶然发现此问题的人有所帮助。
我在主域是 运行 不同应用程序(Shiny 服务器)的子域中部署 Wordpress 时遇到问题。就题目而言,my-domain.com
是主域,我想部署Wordpress站点的位置是my-domain.com/blog
。这是我当前的配置文件(在 /etc/nginx/sites-available/my-domain.com
符号链接到启用站点):
server {
root /var/www/my-domain.com; # Wordpress directory
server_name my-domain.com www.my-domain.com;
index index.html index.htm index.nginx-debian.html index.php;
## Shiny server
location / {
proxy_pass http://MY_IP:SHINY_SERVER_PORT;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
## Wordpress subdomain location
location /blog {
try_files $uri $uri/ /index.php$is_args$args;
location ~ /\.ht {
deny all;
}
## Wordpress restrictions
location = /blog/favicon.ico { log_not_found off; access_log off; }
location = /blog/robots.txt { log_not_found off; access_log off; allow all; }
location ~* \.(css|gif|ico|jpeg|jpg|js|png)$ {
expires max;
log_not_found off;
}
}
## Added PHP config locations for MySQL/WP
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
}
## SSL configuration added by certbot
# listen [::]:443 ssl ipv6only=on; # commented out as the server is not ipv6
listen 443 ssl; # managed by Certbot
ssl_certificate /etc/letsencrypt/live/my-domain.com/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/my-domain.com/privkey.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
}
server {
if ($host = www.my-domain.com) {
return 301 https://$host$request_uri;
} # managed by Certbot
if ($host = my-domain.com) {
return 301 https://$host$request_uri;
} # managed by Certbot
listen 80;
listen [::]:80;
server_name my-domain.com www.my-domain.com;
return 404; # managed by Certbot
}
这个站点的前一个版本只是 Shiny 服务器,我对 运行 just 该应用程序在主域下的配置工作有相当的了解。作为参考,额外的位是基于 this tutorial 添加的。上面的配置在 my-domain.com
上运行 Shiny 服务器应用程序很好,但是当我导航到 my-domain.com/blog
时,出现以下“损坏”版本的 Wordpress:
我已经验证我也正确配置了 Wordpress:如果我注释掉 proxy_pass
到 proxy_set_header
行并将 try_files
行添加到主 location /
块并删除 location /blog
块)。我相信我的问题是对 var/www
目录的误解,对 php 的不了解,以及对 Nginx 整体的一般业余理解。我在这里做错了什么? This question 似乎接近完成我想要的,但在执行此操作后,my-domain.com/blog
下载一个 php 文件而不是加载任何内容。如果我可以提供任何其他信息,请告诉我 - 我不知所措。谢谢!
万一有人好奇,我想通了。我已经很接近了,但有几件事不对劲。
1.) Wordpress 文件位于 /var/www/my-domain.com
主目录中,但需要将它们移动到与我尝试将 Wordpress 移动到的扩展名对齐的相应子目录中。在这种情况下:/var/www/my-domain.com/blog
.
2.) 在此之后,我原来的问题中的 Nginx 配置需要更新如下:
发件人:
## Wordpress subdomain location
location /blog {
try_files $uri $uri/ /index.php$is_args$args;
收件人:
## Wordpress subdomain location
location /blog {
try_files $uri $uri/ /blog/index.php$is_args$args;
3.) 另外,我不确定这是否重要,但我原来的根目录设置为 /var/www/my-domain.com
,我将其更改为 /var/www/my-domain.com/
。这可能根本不重要,但这是我能看到的唯一不同之处。
事后看来,一些简单的事情确实是显而易见的,但我对 Nginx 的了解并不完全。无论如何,希望这对任何偶然发现此问题的人有所帮助。