У нас есть API, который отправляет электронную почту. Я пытался настроить Exchange O365, чтобы сервер API мог отправлять электронную почту без аутентификации. Я внес некоторые изменения и протестировал, и это сработало, отлично! Но потом я протестировал с другого сервера, и он все еще работал. Ой. Я отменил все внесенные мной изменения, поэтому он должен вернуться в состояние развертывания, а реле по-прежнему работает.
Конечно, этого не ожидали, я что-то пропустил?
Шаги, которые я взял:
У меня есть развертывание kubernetes, которое требует следующей конфигурации:
Я придумал:
include modules/*.conf;
worker_processes 1;
error_log /dev/stdout info;
events {
worker_connections 1024;}
http {
include mime.types;
default_type application/octet-stream;
log_format main '$http_x_forwarded_for - $remote_user [$time_local] "$request" $status $body_bytes_sent "$http_referer" "$http_user_agent"';
access_log /dev/stdout main;
sendfile on;
keepalive_timeout 65;
server {
listen 8080;
server_name localhost;
port_in_redirect off;
location / {
root html;
index index.html;
}
error_page 403 /403.html;
error_page 404 /404.html;
error_page 500 /500.html;
error_page 502 /502.html;
error_page 503 /503.html;
error_page 504 /504.html;
}
}
if ($request_method != POST) {
limit_except GET DELETE PUT{
allow 10.0.0.0/8;
deny all;
}
}
Но я все еще могу ПОЛУЧИТЬ из внешней сети
Я бы не стал использовать "если" по причине производительности и по другим причинам.
Что-то вроде этого могло бы быть лучше, если бы вы могли разделить свои URL таким образом. Ключом является limit_except. Есть шанс, что у меня есть параметры в обратном порядке (swap GET с POST) и "deny all" может потребоваться пересмотреть, но эта общая идея должна помочь решить проблему. Я обновлю ответ, основываясь на любых комментариях.
location /post/service {
root html;
index index.html;
// OR proxy_pass http://whatever;
// ALLOW POST
limit_except GET {
deny all;
}
}
location / {
root html;
index index.html;
// OR proxy_pass http://whatever;
// ALLOW GET
limit_except POST {
deny all;
}
}
Единственным допустимым контекстом для директивы limit_except
является location, а семантикой этой директивы является ограничение использования методов HTTP, которые не явно исключены.
Вам нужна такая строфа:
location / {
root /usr/share/nginx/html;
index index.html;
limit_except POST {
allow 10.0.0.0/8;
deny all;
}
}