当我访问时http://niklasrosenstein.com/blog
一切都很好,但如果我点击链接或访问某个页面,http://niklasrosenstein.com/blog/shop
我最终会进入http://localhost/shop
。我做错了什么?
稍后使用的 Wordpress 服务器的配置proxy_pass
:
##
# Internal Wordpress
##
server {
listen 127.0.0.1:8050;
root /home/www-data/blog/htdocs;
index index.php;
try_files $uri $uri/ /index?$args;
location / {
try_files $uri $uri/ /index.php?$args;
}
location ~ \.php$ {
# Pass PHP scripts through FastCGI.
try_files $uri =404;
fastcgi_intercept_errors on;
fastcgi_param SCRIPT_FILENAME $request_filename;
fastcgi_index index.php;
fastcgi_pass php-cgi;
include /etc/nginx/fastcgi_params;
}
location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
# Cache static files as long as possible.
expires max;
log_not_found off;
}
}
公共服务器配置:
server {
listen 80;
server_name niklasrosenstein.com;
client_max_body_size 15M;
resolver 127.0.0.1;
##
# Locations
##
location = /favicon.ico {
log_not_found off;
access_log off;
}
location = /robots.txt {
log_not_found off;
access_log off;
}
##
# Wordpress
##
location ~/blog(|(.*))$ {
access_log /home/www-data/blog/access.log;
error_log /home/www-data/blog/error.log;
proxy_pass http://localhost:8050/$2;
}
}
@MarkStosberg 我能够让它工作戈格斯通过使用location
这样的正则表达式指令。我认为我可以让它以同样的方式与 Wordpress 一起工作。由于没有本地服务器可以为 Wordpress 提供服务,我认为只需使用 NGinx 添加一个(因此有两个服务器指令)。
##
# Gogs Git Server
##
location ~/git(|/(?<giturl>.*))$ {
access_log /home/gogs/access.log;
error_log /home/gogs/error.log;
proxy_pass http://127.0.0.1:3000/$giturl;
}
答案1
我发现错误的地方在于有两个server
配置。一个标记为“内部 Wordpress”,但整个博客在 上向公众开放/blog
。同时使用反向代理和 FastCGI 是不必要的复杂操作。只需使用FastCGI
就足够了。
我建议尝试仅使用 FastCGI 并且不使用反向代理的单个server
块,看看是否能解决您的问题。
其他需要考虑的事项:
- 检查 /etc/hosts 以确保您没有将域映射回本地主机
- 通过删除“resolver”指令来简化配置。在配置中使用 12.0.0.1 代替“localhost”。
答案2
我并不是很热衷于这个WordPress
世界,但我会尽力:
这样做curl -I http://niklasrosenstein.com/blog/shop
可以得到:
HTTP/1.1 301 Moved Permanently
Server: nginx
Date: Tue, 19 Jan 2016 22:41:49 GMT
Content-Type: text/html; charset=UTF-8
Connection: keep-alive
X-Powered-By: PHP/5.4.45-0+deb7u2
Expires: Wed, 11 Jan 1984 05:00:00 GMT
Cache-Control: no-cache, must-revalidate, max-age=0
Pragma: no-cache
Location: http://niklasrosenstein.com/shop/
所以,http://localhost/shop/
对我来说不行,但是仍然如此301 Moved Permanently
。
- 您删除了该
resolver...
指令吗? - 您检查过
hosts
本地机器上的文件吗?
/blog/shop/
关于从到 的重定向/shop/
:- 正如 所示X-Powered-By: PHP/5.4.45-0+deb7u2
,这是从您的后端(即 )发起的,而WordPress
不是在nginx
级别。- 我认为,您必须进行配置WordPress
以使其知道,它不是在 提供服务http://niklasrosenstein.com/
,而是在 提供服务http://niklasrosenstein.com/blog/
。看看这,尤其是第三点。
最后但并非最不重要的一点是,正如 Mark Stosberg 已经提到的,您的设置似乎有点“奇怪”。就目前情况而言,我看不出您使用两个反向代理的任何理由。不确定您为什么这样做;但当然,这取决于您。