如何在使用PM2的Azure Web Apps中运行SPA时添加响应标头

mrwjdhj3  于 2023-06-24  发布在  其他
关注(0)|答案(2)|浏览(74)

我有一个React SPA,它通过启动命令在Azure Web Apps,Node堆栈(Node 16 LTS)中运行:

pm2 serve /home/site/wwwroot --no-daemon --spa

我想为每个传出请求添加一个响应头(具体来说,是一个Content-Security-Policy头)。
我尝试过的事情:

  • 添加.htaccess文件
  • 添加web.config文件
  • 正在查找环境设置或配置pm2或节点的方法

我没有任何节点代码可以更改(所以我不能在那里添加头),在React中这样做感觉“太晚了”-我认为这是服务器上的节点或Azure需要做的事情。
我的核心选择是把前门包起来,在那里做,但我希望有办法实现这一点。

ar5n3qh5

ar5n3qh51#

我花了几天时间做同样的事情,我发现pm2通过位于 /usr/local/lib/node_modules/pm2/lib/API/ 中的Serve.js配置文件为React SPA提供服务。
在里面,您会发现带有响应和结果参数的http.createServer函数。您可以使用response.setHeader(Node.js方法)向response参数添加header。但是有一个问题,我们在/home之外进行的任何修改都不是持久性的,所以我们必须执行一些额外的步骤:
1.通过SSH进入计算机的控制台(在Azure门户网站的左侧菜单中,Developer Tools部分,SSH选项和Go)。

1.将pm2文件夹复制到/home/site
cp -r /usr/local/lib/node_modules/pm2/ /home/site/
1.修改Serve.js文件,在http. createServer中添加头文件。您可以通过vi/nano在控制台中完成,或者通过KuduLite门户(https://[NAME-OF-YOUR-SITE].scm.azurewebsites.net/newui),文件管理器,编辑选项以图形方式完成。
public function(function(function,function){
response.setHeader('Content-Security-Policy',“default-src ...“);
1.在Azure门户中,输入Web App Service配置(在左侧菜单的“设置”部分中)。在“常规设置”中,将“启动命令”字段替换为以下文本:
/home/site/pm2/bin/pm2 serve /home/site/wwwroot --no-daemon --spa --name APP_NAME
(也适用于节点16)。

1.保存更改,等待确认通知并重新启动服务。
也许不是最好的解决方案,但我没有找到另一种方法来覆盖pm2的Serve.js设置,而不必复制整个文件夹。
我为我的英语翻译道歉。

sczxawaw

sczxawaw2#

在App Service Linux中,React应用程序可以使用PM2、npm start或自定义命令启动。
当在项目中找到一个常见的Node.js文件时,容器会自动启动PM2应用:

另请注意,从Node 14 LTS开始,容器不会自动启动带有PM2的应用。要使用PM2启动应用,请将启动命令设置为pm2 start <.js-file-or-PM2-file> --no-daemon
确保使用--no-daemon参数,因为PM2需要在前台运行,容器才能正常工作。
参考:https://learn.microsoft.com/en-us/azure/app-service/configure-language-nodejs?pivots=platform-linux

相关问题