- 
                Notifications
    You must be signed in to change notification settings 
- Fork 155
Description
Describe the bug
I have no idea if it is a bug of some sort or we just can't find a right solution.
We try to use nginx-s3-gateway in our k8s-enviroment for proxing requests to AWS S3 bucket. So long story short our route is:
client > DNS > NLB > k8s > ingress-controller > nginx-s3-gateway pod > AWS S3 bucket.
We are keep receiving a 405 response for PUT method, when trying to work with AWS S3 bucket.
Just to be clear, GET method is working fine.
For example, if we have a file test-s3.txt in our bucket and we call:
curl https://nginx-test.my-domain.net/api/s3/test-s3.txt
Then we receive 200 response and contents of the file.
To reproduce
Steps to reproduce the behavior:
- curl https://nginx-test.my-domain.net/api/s3/ --upload-file testing-file.txt
- An error after the curl command:
 <html><head><title>405 Not Allowed</title></head><body><center><h1>405 Not Allowed</h1></center><hr><center>nginx</center></body></html>
- An error in nginx-s3-gateway pod's log:
 10.111.22.333 - - [20/Jan/2025:07:42:48 +0000] "PUT /testing-file.txt HTTP/1.1" 405 150 "-" "curl/7.88.1" "10.444.5.66"
Expected behavior
Allowed methods for requests should be controllable via some set of configuration. The PUT method is acceptable and response is 200.
Also we've tried to use s3listing_location.conf.template to inject additional configuration like so, but got a negative result as well:
# Deployment values for nginx-s3-gateway:
  volumeMounts:
      - name: s3-location
        mountPath: /etc/nginx/templates/gateway/s3listing_location.conf.template
        subPath: s3listing_location.conf.template
  volumes:
    - name: s3-location
      configMap:
        name: s3-location-configmap
        items:
          - key: config
            path: s3listing_location.conf.template
# ConfigMap values:
  configuration:
    enabled: true
    name: s3-location
    s3Location: |
      dav_methods PUT;Checks inside the container:
cat /etc/nginx/templates/gateway/s3listing_location.conf.template
dav_methods PUT;
cat /etc/nginx/conf.d/gateway/s3listing_location.conf
dav_methods PUT;Your environment
- Version of this project or specific commit when building your own S3 container = nginxinc/nginx-s3-gateway:latest-njs-oss-20241223;
- S3 backend implementation = AWS;
- Authentication method = AWS Credentials (IAM keys);
- AWS EKS version = v1.31.4-eks-2d5f260.
Additional context
Our environment variables for nginx-s3-gateway deployment:
  extraEnv:
    - name: S3_BUCKET_NAME
      value: "my-bucket"
    - name: S3_SERVER
      value: "s3.ap-southeast-1.amazonaws.com"
    - name: S3_SERVER_PROTO
      value: "https"
    - name: S3_SERVER_PORT
      value: "443"
    - name: DEBUG
      value: "true"
    - name: S3_STYLE
      value: "virtual"
    - name: S3_REGION
      value: "ap-southeast-1"
    - name: AWS_REGION
      value: "ap-southeast-1"
    - name: AWS_SIGS_VERSION
      value: "4"
    - name: ALLOW_DIRECTORY_LIST
      value: "false"
    - name: PROVIDE_INDEX_PAGE
      value: "false"
    - name: AWS_ACCESS_KEY_ID
      valueFrom:
        secretKeyRef:
          name: my-secret
          key: AWS_ACCESS_KEY_ID
    - name: AWS_SECRET_ACCESS_KEY
      valueFrom:
        secretKeyRef:
          name: my-secret
          key: AWS_SECRET_ACCESS_KEY