NGinx + Wordpress 在子 URL 处将域名转换为本地主机

NGinx + Wordpress 在子 URL 处将域名转换为本地主机

当我访问时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 已经提到的,您的设置似乎有点“奇怪”。就目前情况而言,我看不出您使用两个反向代理的任何理由。不确定您为什么这样做;但当然,这取决于您。

相关内容