我有一个现有的 Meteor 应用程序,并使用 Nginx 作为我的服务器,比如说在 example.com
我想添加一个 wordpress 博客,可以通过 example.com/blog 访问
我还希望我的博客存在于它自己的 droplet(服务器)上,但如果它需要在同一个 droplet(服务器)上,那么也可以。
我该怎么做呢?
我已经能够让它与server_name
blog.example.com 上的不同服务器块一起工作。我还让静态文件可以在 example.com/blog/index.html 上的子目录下访问。所有内容都存在于同一个 droplet(服务器)上。
但是我无法通过 example.com/blog 访问 wordpress 应用程序。
编辑:
我最终做的是创建一个新的服务器实例 (droplet),并使用 LEMP 堆栈和 NGINX 对其进行配置。如果我尝试访问 IP,它就会工作。
现在,在我的实际服务器上添加了一个位置块
location /blog {
rewrite ^/blog/(.*)$ /$1 break;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host $host;
proxy_pass http://wordpress-server-ip;
proxy_redirect off;
}
我遇到的新问题是,我的博客无法在 chrome 中加载 .css 文件,因为我的代理服务器配置为 https,而 wordpress 通过 http 加载文件。您可以在此查看https://juerix.com/blog。
所以我进入我的wp-config
文件并更改了网站和 wordpress url https://juerix.com/blog
。没有帮助。
答案1
我花了一段时间才弄清楚。关键在于 try_files 这一行。
# Default location to serve
location / {
# If the file can't be found try adding a slash on the end - it might be
# a directory the client is looking for. Then try the Wordpress blog URL
# this might send a few requests to PHP that don't need to go that way
try_files $uri $uri/ /blog/index.php?$args;
}
这是我发现的另一个有用的信息
# Add trailing slash to */wp-admin requests.
rewrite /blog/wp-admin$ $scheme://$host$uri/ permanent;
下面是我使用的另一个位置块,仅作为示例
# Rate limit wp-login.php to help prevent brute force attacks
location = /blog/wp-login.php {
# Next line applies the rate limit defined above
limit_req zone=login burst=3;
fastcgi_keep_conn on;
fastcgi_pass php56-fpm;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
more_clear_headers "Cache-Control";
more_clear_headers Server; more_clear_headers "Pragma"; more_clear_headers "Expires";
# No caching
more_clear_headers "Cache-Control";
add_header Cache-Control "private, max-age=0, no-cache, no-store";
more_clear_headers "Expires";
}