!更新!
默認配置:
server {
listen 80 default_server;
listen [::]:80 default_server;
root /var/www/public/;
index index.html;
}
server {
listen 443;
server_name localhost;
root /var/www/public/test/;
index index.html;
ssl_certificate /etc/nginx/conf.d/cert.pem;
ssl_certificate_key /etc/nginx/conf.d/key.pem;
location / {
proxy_pass http://sns-mock:9911;
}
}
碼頭工人-compose.yml:
version: '3.7'
services:
sns-mock:
image: s12v/sns
container_name: sns-mock
ports:
- "9911:9911"
networks:
- default-nw
volumes:
- ./config/db.json:/etc/sns/db.json
sns-mock-proxy:
image: nginx:latest
container_name: sns-mock-proxy
ports:
- "8443:443"
networks:
- default-nw
volumes:
- ./conf.d:/etc/nginx/conf.d
- ./log/nginx:/var/log/nginx
depends_on:
- sns-mock
networks:
default-nw:
external: true
php測驗檔案:
<?php
use PHPUnit\Framework\TestCase;
use Aws\Sns\SnsClient;
class FooTest extends TestCase
{
public function testFoo(): void
{
$snsClient = new SnsClient([
'endpoint' => 'localhost:8443',
'region' => 'eu-west-2',
'version' => '2010-03-31',
'validate' => false
]);
$result = $snsClient->publish([
'Message' => 'foo',
'TopicArn' => 'arn:aws:sns:eu-west-2:123450000001:test-topic'
]);
dd($result, 'ok');
}
}
測驗結果:

我的專案:

在我的 access.log 檔案中,我可以從 phpunit 測驗中捕獲回應,如下所示:
172.28.0.1 - - [21/May/2022:09:27:58 0000] "POST / HTTP/1.1" 200 270 "-" "aws-sdk-php/3.222.17 OS/Linux/5.13.0-41-generic lang/php/8.1.6 GuzzleHttp/7" "-"
但是,我不知道如何在日志中獲取回應,例如標題或正文。
==================================================== ==================================================== =======================================
uj5u.com熱心網友回復:
您的問題的一般答案是“否”。然而,某種解決方法是可能的。
nginx 處理的每個請求都會通過$request_id變數(16 個隨機位元組,十六進制)接收一些可用的內部請求 ID。您可以將該 ID 添加到定義您自己的自定義日志格式的訪問日志中:
log_format include_id '$remote_addr - $remote_user [$time_local] $request_id "$request" '
'$status $body_bytes_sent "$http_referer" "$http_user_agent"';
access_log /var/log/nginx/access.log include_id;
接下來,在您擁有proxy_pass指令的同一位置添加proxy_store一個:
proxy_store /var/log/nginx/requests/$request_id.json;
我在這里使用單獨的/var/log/nginx/requests目錄,以免您/var/log/nginx變得一團糟。當然,它應該在啟動 docker 容器之前手動創建,并且它應該像/var/log/nginx它自己一樣可寫(包括 SELinux 背景關系,如果在主機系統上使用的話)。但是,出于測驗目的,您可以從proxy_store /var/log/nginx/$request_id.json;.
整個 nginx 配置應該看起來像
log_format include_id '$remote_addr - $remote_user [$time_local] $request_id "$request" '
'$status $body_bytes_sent "$http_referer" "$http_user_agent"';
server {
listen 443;
listen [::]:443;
access_log /var/log/nginx/access.log include_id;
ssl_certificate /etc/nginx/conf.d/cert.pem;
ssl_certificate_key /etc/nginx/conf.d/key.pem;
location / {
proxy_pass http://sns-mock:9911;
proxy_store /var/log/nginx/requests/$request_id.json;
}
}
如果您也希望通過純 HTTP 協議獲得請求,則可以對純 HTTP 服務器塊使用相同的配置,而不是您在問題中顯示的配置:
server {
listen 80;
listen [::]:80;
access_log /var/log/nginx/access.log include_id;
location / {
proxy_pass http://sns-mock:9911;
proxy_store /var/log/nginx/requests/$request_id.json;
}
}
或改為發出 HTTP 到 HTTPS 重定向:
server {
listen 80;
listen [::]:80;
return 308 https://$host$request_uri;
}
現在每個請求的回應正文可以通過其請求 ID 從訪問日志中識別出來,例如
172.18.0.1 - - [20/May/2022:19:54:14 0000] d6010d713b2dce3cd2713f1ea178e140 "POST / HTTP/1.1" 200 615 "-" "aws-sdk-php/3.222.17 OS/Linux/5.13.0-41-generic lang/php/8.1.6 GuzzleHttp/7" "-"
將在/var/log/nginx/requests目錄下可用(給定訪問日志條目中顯示的請求的回應正文將作為d6010d713b2dce3cd2713f1ea178e140.json檔案提供)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/479806.html
