Nginx - 将 Wordpress 作为子域运行,另一个应用程序在主域上运行

Posted

技术标签:

【中文标题】Nginx - 将 Wordpress 作为子域运行,另一个应用程序在主域上运行【英文标题】:Nginx - Run Wordpress as subdomain where another app is running on main domain 【发布时间】:2020-12-31 22:11:33 【问题描述】:

我在主域运行不同应用程序(闪亮服务器)的子域中部署 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_passproxy_set_header 行并将 try_files 行添加到主 location / 块并删除 @987654335 @ 堵塞)。我相信我的问题是对var/www 目录的误解,不了解php,以及对Nginx 整体的一般业余理解。我在这里做错了什么? This question 似乎接近于完成我想要的,但是在实现这个之后,my-domain.com/blog 下载一个 php 文件而不是加载任何东西。如果我可以提供任何其他信息,请告诉我 - 我很茫然。谢谢!

【问题讨论】:

【参考方案1】:

万一有人好奇,我想通了。我已经很接近了,但有一些事情发生了。

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 的了解还不够。无论如何,希望这对任何偶然发现此问题的人有所帮助。

【讨论】:

以上是关于Nginx - 将 Wordpress 作为子域运行,另一个应用程序在主域上运行的主要内容,如果未能解决你的问题,请参考以下文章

NGINX - 将子域指向不是域目录子目录的不同目录

Phpmyadmin 作为 Nginx 中的子域

将弹性豆茎(wordpress 博客)映射到子域

如何将我的 wordpress 博客集成到我的子域中?

wordpress-subdomains怎么用

如何更快地将 WordPress 网站从子域移动到主域