首页 > 解决方案 > 如何在 nginx 位置提供 html/php

问题描述

嘿,前端人员将网站从共享主机转移到 SPA droplet。我在 /build 中有一个 Headless CMS,在 /mail 中有一个 Node SendGrid Mailserver,并且我试图在 /wp-content/themes/webdev/projects/trackjob/point_card/ 中有一些 html 和 php。(它是一个 php 代理) 原因是一个旧客户端从我的旧站点使用 iframe 到这个 url,最好将它复制过来。

card_api_js_v2.html 需要向同一父目录中的 php 文件发出 AJAX 请求。

我只是越来越熟悉nginx。建议?

目前,我有这个...

location / {
   root /var/www/build;
   try_files $uri $uri/ /;
}

location /mail {
   root /var/www/server;
   proxy_pass http://localhost:3000;
   proxy_http_version 1.1;
   proxy_set_header Upgrade $http_upgrade; 
   proxy_set_header Connection 'upgrade';
   proxy_set_header Host $host;
   proxy_cache_bypass $http_upgrade;
}

// DOESNT WORK ??? 
location /wp-content/themes/webdev/projects/trackjob/point_card/ {
   root /var/www/wp-content/themes/webdev/projects/trackjob/point_card;  
   try_files $uri $uri/ /card_api_js_v2.html;
}

标签: phphtmlnginx

解决方案


您对root指令的工作方式有误解。当您使用此位置块时

location /wp-content/themes/webdev/projects/trackjob/point_card/ {
   root /var/www/wp-content/themes/webdev/projects/trackjob/point_card;
   try_files $uri $uri/ /card_api_js_v2.html;
}

并收到一个/wp-content/themes/webdev/projects/trackjob/point_card/card_api_js_v2.html传入请求,nginx 连接$document_root(即/var/www/wp-content/themes/webdev/projects/trackjob/point_card)和$uri(即/wp-content/themes/webdev/projects/trackjob/point_card/card_api_js_v2.html)变量并搜索文件/var/www/wp-content/themes/webdev/projects/trackjob/point_card/wp-content/themes/webdev/projects/trackjob/point_card/card_api_js_v2.html(显然不会找到)。root这是和aliasnginx 指令之间的主要区别。您的位置块应该是

location /wp-content/themes/webdev/projects/trackjob/point_card/ {
   root /var/www;  
   try_files $uri $uri/ /wp-content/themes/webdev/projects/trackjob/point_card/card_api_js_v2.html;
}

反而。

更新

如果您需要在此位置提供 PHP 脚本,请将其更改为

location ^~ /wp-content/themes/webdev/projects/trackjob/point_card/ {
   root /var/www;  
   try_files $uri $uri/ /wp-content/themes/webdev/projects/trackjob/point_card/card_api_js_v2.html;
   location ~ \.php$ {
      include fastcgi.conf;
      fastcgi_param SCRIPT_FILENAME $request_filename;
      # if your php-fpm listens to the UNIX socket (assuming default socket path)
      # fastcgi_pass unix:/var/run/php/php7.4-fpm.sock
      # if your php-fpm listens to the TCP/IP port (assuming default port)
      # fastcgi_pass 127.0.0.1:9000;
   }
}

推荐阅读