Modifying Nginx Configuration through a File in the FastAPI application

Modifying Nginx Configuration through a File in the FastAPI application

This article is concentrated for applications deployed to elastic beanstalk on AWS

In addition to the method that handles ssh into your instance, which is a little confusing, there is an alternative approach to modify the Nginx configuration for timeout values in a Beanstalk deployed app. This method involves creating a file specifically for Nginx configuration and placing it in your application's directory structure. Let's walk through the steps.

Step 1: Create the Nginx Configuration File

  1. In your application's root directory, navigate to .platform/nginx/conf.d/.

  2. Create a new file named proxy.conf. You can use the command-line interface or a text editor to create the file.

Step 2: Add Configuration Directives

Open the proxy.conf file and add the following configuration directives:

client_header_timeout   1200;
client_body_timeout     1200;
send_timeout            1200;
proxy_connect_timeout   1200;
proxy_read_timeout      1200;
proxy_send_timeout      1200;

In the example above, each timeout value is set to 1200 seconds (20 minutes). Adjust these values based on your application's requirements.

client_header_timeout

This directive sets the maximum time (in seconds) that the Nginx server will wait for the client to send the entire request header. In this case, it is set to 1200 seconds (20 minutes).

client_body_timeout

This directive sets the maximum time (in seconds) that the Nginx server will wait for the client to send the request body (i.e., the data in the HTTP POST or PUT request). Again, it is set to 1200 seconds (20 minutes) in this example.

send_timeout

The send_timeout directive determines the maximum time (in seconds) that Nginx will wait for the response to be sent to the client. If the response transmission takes longer than this timeout value, the connection will be closed. In this case, it is set to 1200 seconds (20 minutes).

proxy_connect_timeout

This directive sets the maximum time (in seconds) that Nginx will wait for a connection to be established with a backend server when acting as a reverse proxy. It applies when Nginx is proxying requests to another server. Here, the timeout is set to 1200 seconds (20 minutes).

proxy_read_timeout

The proxy_read_timeout directive defines the maximum time (in seconds) that Nginx will wait for a response from the backend server after the connection has been established. If no data is received within this timeout, Nginx will close the connection. The value is set to 1200 seconds (20 minutes) in this example.

proxy_send_timeout

This directive sets the maximum time (in seconds) that Nginx will wait for the entire request to be sent to the backend server after the connection has been established. If the request transmission takes longer than this timeout, the connection will be closed. Once again, the value is set to 1200 seconds (20 minutes).

Step 3: Save the File

After adding the configuration directives, save the proxy.conf file.

Step 4: Deploy the Configuration

To deploy the Nginx configuration file along with your application, follow these steps:

  1. Ensure that you have the AWS CLI installed and configured.

  2. In your application's root directory, use the AWS CLI to deploy the updated configuration:

aws elasticbeanstalk update-environment --environment-name <environment-name> --option-settings Namespace=aws:elasticbeanstalk:container:python,OptionName=StaticFiles,Value=/static/.platform/nginx/conf.d

Replace <environment-name> with the name of your Beanstalk environment.

  1. Or else the app can be deployed directly by logging onto AWS using the Beanstalk console

Step 5: Verify the Changes

After deploying the updated configuration, verify whether the changes have taken effect by performing the following steps:

  1. Access your Beanstalk application using its URL.

  2. Perform a test request that requires a longer duration to complete.

  3. Monitor the request to ensure it completes without any timeout errors.

If the request finishes successfully without any timeouts, congratulations! You have successfully increased the timeout values of requests on your Nginx server using the alternative method.

Conclusion

In this alternative method, we explored how to modify the Nginx configuration for timeout values by adding a specific file to your application's directory structure. This method provides a convenient way to customize the Nginx configuration without directly modifying system files. Choose the method that suits your preference and application requirements.

Kindly refer to the article before this in which the possible solutions for request time-out errors were explained

Did you find this article valuable?

Support Sai Lokesh Reddy by becoming a sponsor. Any amount is appreciated!