問題の説明: 内部ネットワーク環境では、IP でインターフェイスにアクセスすることは正常です。ただし、外部ネットワーク環境では、ドメイン名を使用してインターフェイスにアクセスすると、get および post リクエストは正常に使用できますが、put および delete リクエストは正常に使用できません。
いろいろ調べて必要に応じてnginxの設定をしたのですがうまくいきませんでした
server {
listen 8099;
server_name http://aa.com;
#index index.php index.html index.htm default.php default.htm default.html;
gzip on;
gzip_static on; # 需要http_gzip_static_module 模块
gzip_min_length 1k;
gzip_comp_level 4;
gzip_proxied any;
gzip_types text/plain text/xml text/css;
gzip_vary on;
gzip_disable "MSIE [1-6]\.(?!.*SV1)";
add_header Access-Control-Allow-Origin *;
add_header Access-Control-Allow-Headers X-Requested-With;
add_header Access-Control-Allow-Methods GET,PUT,POST,OPTIONS;
# 若新增后端路由前缀注意在此处添加(|新增)
location / {
proxy_pass http://aa.com/gateway;
proxy_connect_timeout 60s;
proxy_send_timeout 60s;
proxy_read_timeout 60s;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto http;
}
# 避免端点安全问题
if ($request_uri ~ "/actuator"){
return 403;
}
}
その後、イントラネットへの侵入について学びました.図に示すように、
ゲートウェイ層はフィルタリングとインターセプトを設定できます.私は、ゲートウェイサーバーが削除とプットの要求をインターセプトし、取得と投稿のみを許可したことをパーティAの顧客に確認しました.やむを得ずコードを変更しましたが、プロジェクトは spring-cloud-alibaba ベースで、安らかなスタイルのインターフェースで、変更するインターフェースが多すぎて、負荷がかかります... あきらめてください
~~
そこで採用したのが以下の方法
- フロント エンドはコードを変更する必要があります。これはバイパスできません。すべての PUT/DELETE 要求は POST に変更する必要があり、特別なヘッダーを運ぶ必要があります。すべての PUT 要求は、ヘッダーを運ぶ必要があります。X-HTTP-Method-Override:
PUT
すべてDELETE requests 、運ぶために Header: X-HTTP-Method-Override: DELETE
参考
Request URL: http://xxx.com/admin/log/12345
Request Method: POST
POST /admin/log/12345 HTTP/1.1
Host: 192.168.2.170:8080
Connection: keep-alive
Content-Length: 0
Accept: application/json, text/plain, */*
Authorization: Bearer 5542d6-5cd6-48ac-a3b2-19b3fb4d
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.77 Safari/537.36
X-HTTP-Method-Override: delete
Origin: http://192.168.1.170:8080
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
2. サーバーはヘッダーに従ってリクエスト メソッドを変換します: X-HTTP-Method-Override: ゲートウェイで処理できます, zuul または HiddenHttpMethodFilter を使用する (メソッドを使用する, Baidu 自分で); または変更して nginx プロキシ レイヤーで転送します
,サーバーはしません 任意の処理を行うことができます。nginx メソッドを使用します。構成を参照してください。
在nginx的server中添加
set $method $request_method;
if ($http_X_HTTP_Method_Override ~* 'DELETE') {
set $method DELETE;
}
if ($http_X_HTTP_Method_Override ~* 'PUT') {
set $method PUT;
}
proxy_method $method;
location / {
......
変更後、サービスを再起動して、200 OK! ! !
もちろん、ネットワーク管理者にゲートウェイの傍受ルールを変更するよう依頼できれば、それは素晴らしいことです。! !