Чтобы устранить проблему CORS (Cross-Origin Resource Sharing) при использовании Swagger с Nginx и Go-сервером, вам нужно будет убедиться, что ваш сервер правильно обрабатывает заголовки CORS, а также скорректировать настройки Nginx.
1. **Внедрение заголовков CORS на сервере**:
В вашем Go-коде при обработке HTTP-запросов необходимо устанавливать заголовки CORS. Обычно это делается в middleware. Пример простого middleware в Go:
```go
package main
import (
"net/http"
)
func enableCORS(next http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Access-Control-Allow-Origin", "*") // или укажите домен
w.Header().Set("Access-Control-Allow-Headers", "Content-Type, Authorization")
w.Header().Set("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS")
if r.Method == http.MethodOptions {
w.WriteHeader(http.StatusOK)
return
}
next.ServeHTTP(w, r)
})
}
```
Затем оберните ваши маршруты в этот middleware:
```go
http.Handle("/", enableCORS(http.HandlerFunc(yourHandler)))
```
2. **Настройка Nginx**:
Вам также следует убедиться, что Nginx правильно передает CORS заголовки. Чтобы сделать это, вы можете добавить следующие директивы в ваш `nginx.conf`:
```nginx
server {
listen 80;
location / {
proxy_pass http://server:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
# Задаем заголовки CORS
add_header 'Access-Control-Allow-Origin' '*'; # или укажите домен
add_header 'Access-Control-Allow-Headers' 'Content-Type, Authorization';
add_header 'Access-Control-Allow-Methods' 'GET, POST, PUT, DELETE, OPTIONS';
# Если запрос OPTIONS, возвращаем 204
if ($request_method = OPTIONS) {
add_header 'Access-Control-Allow-Origin' '*';
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
add_header 'Access-Control-Allow-Headers' 'Content-Type, Authorization';
add_header 'Content-Length' 0;
return 204;
}
}
}
```
Эти изменения позволят вашему приложению обрабатывать CORS запросы и позволят из Swagger отправлять запросы к вашему API.
После внесения изменений не забудьте перезапустить Nginx и ваш Go-сервер, чтобы применить новые настройки.