Home Linux Administration Setup A Secure Simple HTTP Server with HTTPS, Authentication, and More

Setup A Secure Simple HTTP Server with HTTPS, Authentication, and More

Serve Files over Web using Simple HTTP Server

By sk
632 views

The Simple HTTP Server is a lightweight, cross-platform application written in Rust. It provides developers and system administrators with a quick and efficient way to serve static content over HTTP or HTTPS. This tool is particularly useful for testing, development, and simple file sharing scenarios.

In this detailed tutorial, we will discuss Simple HTTP Server's key features, installation steps, and practical usage with an example in Debian Linux.

Key Features

The Simple HTTP Server offers a range of features that make it a versatile choice for various use cases:

Cross-Platform Compatibility

Simple HTTP server runs on Windows, macOS, and Linux, ensuring broad accessibility for users across different operating systems.

Customizable Server Settings

Users can configure various aspects of the server, including:

  • IP address and port binding
  • Number of worker threads
  • Root directory for serving files

Security Options

The server includes several security-related features:

  • HTTPS support with TLS/SSL certificates
  • HTTP Basic Authentication
  • Cross-Origin Resource Sharing (CORS) headers
  • Content Security Policy headers (COEP and COOP)

File Handling Capabilities

The Simple HTTP Server offers robust file handling features:

  • Automatic MIME type detection
  • HTTP caching control
  • Support for partial requests (byte ranges)
  • Optional automatic indexing of directories
  • File upload functionality (with CSRF protection)

Performance and Usability

To enhance performance and user experience, the server provides:

  • Customizable number of worker threads
  • Content compression (gzip/deflate)
  • Directory sorting options (by name, size, or modification date)
  • Breadcrumb navigation for easier browsing

Install Simple HTTP Server in Linux

The following steps are tested on a freshly installed Debian 12 system.

Pre-requisites

Before installing the Simple HTTP Server, ensure your system has the necessary tools and libraries:

Update your system's package list:

sudo apt update

Install required packages:

sudo apt install curl build-essential pkg-config libssl-dev

These packages provide essential build tools and libraries needed for the installation process.

Method 1: Install Simple HTTP Server using Cargo (Recommended)

Install Rust and Cargo:

curl https://sh.rustup.rs -sSf | sh

Follow the on-screen prompts to complete the installation.

Source the Rust environment (or restart your terminal):

source $HOME/.cargo/env

Install Simple HTTP Server:

cargo install simple-http-server

Verify the installation:

simple-http-server --version

Method 2: Download Pre-compiled Binary

For users who prefer not to install Rust, pre-compiled binaries are available:

Visit the official download page and download the appropriate binary for your system:

For Linux users, make the binary executable:

chmod +x simple-http-server

Move the binary to a directory in your PATH, for example:

sudo mv simple-http-server /usr/local/bin/

Troubleshooting

If you encounter any issues during installation:

Ensure all dependencies are installed:

sudo apt install build-essential pkg-config libssl-dev

Update your Rust toolchain:

rustup update

If SSL-related errors persist, specify the SSL library path:

export OPENSSL_DIR=/usr/lib/ssl
cargo install simple-http-server

Remember to run simple-http-server --help after installation to view all available options and start using the server for your web development needs.

Basic Usage

The Simple HTTP Server offers a range of command-line options for customization. Here's a basic example of how to start the server:

simple-http-server -i -p 80 <folder-name>

This command starts the server with the following settings:

  • -i: Enables automatic rendering of index pages (index.html or index.htm)
  • -p 80: Sets the server port to 80 (the standard HTTP port)
  • folder-name: Specifies the root directory to serve files from

For instance, to serve your user's $HOME directory, you can run:

simple-http-server -i -p 80 /home/user/

Replace /home/user with your actual directory name.

Serve Files over Web using Simple HTTP Server
Serve Files over Web using Simple HTTP Server

Advanced Configuration

The server provides numerous flags and options for advanced configuration:

  • --cors: Enable Cross-Origin Resource Sharing
  • --auth: Set up HTTP Basic Authentication
  • --cert and --certpass: Configure HTTPS with a certificate
  • --compress: Enable file compression
  • --upload: Allow file uploads
  • --try-file: Serve a specific file for missing routes (useful for single-page applications)

Users can view all available options by running simple-http-server --help.

Practical Example: Using Simple HTTP Server for Web Development

Let's say you're a web developer working on a new website. You've created your HTML, CSS, and JavaScript files locally and want to test them in a browser environment before deploying to a production server.

Setting Up the Project

Create a project directory:

mkdir my_website
cd my_website

Create some sample files:

echo "<html><body><h1>Welcome to My Website</h1></body></html>" > index.html
echo "body { font-family: Arial, sans-serif; }" > styles.css

Starting the Server

Now, let's use Simple HTTP Server to serve these files:

simple-http-server -i -p 8080 .

This command does the following:

  • -i: Enables automatic index page rendering
  • -p 8080: Sets the server port to 8080
  • .: Serves files from the current directory

Sample Output:

     Index: enabled, Cache: enabled, Cors: disabled, Coop: disabled, Coep: disabled, Range: enabled, Sort: enabled, Threads: 3
          Upload: disabled, CSRF Token: 
          Auth: disabled, Compression: disabled
         https: disabled, Cert: , Cert-Password: 
          Root: /home/ostechnix/my_website,
    TryFile404: 
       Address: http://0.0.0.0:8080
    ======== [2024-08-06 12:27:33] ========

Accessing Your Website

Open a web browser and navigate to http://localhost:8080 or `http://ip-address:8080. You should see your "Welcome to My Website" message.

Simple HTTP Server Demo
Simple HTTP Server Demo

Enable Additional Features

Let's explore some additional features:

Enabling CORS

If you're developing an API and need to allow cross-origin requests:

simple-http-server -i -p 8080 --cors .

Compressing Files

To enable gzip compression for JavaScript and CSS files:

simple-http-server -i -p 8080 -c=js,css .

Enabling File Uploads

If you want to test file upload functionality:

simple-http-server -i -p 8080 -u .

Remember, this generates a CSRF token you'll need to include in your upload requests.

Using HTTPS

For testing HTTPS:

Generate a self-signed certificate:

openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -days 365 -nodes
openssl pkcs12 -export -out certificate.pfx -inkey key.pem -in cert.pem

Start the server with HTTPS:

simple-http-server -i -p 8443 --cert certificate.pfx --certpass your_password .

Now you can access your site at https://localhost:8443.

As you can see, Simple HTTP Server can be a valuable tool in a web developer's workflow. It allows for quick testing of static files, supports various web development scenarios, and offers features like CORS and HTTPS that mirror production environments. The server's simplicity and flexibility make it an excellent choice for local development and testing tasks.

Conclusion

The Simple HTTP Server offers a powerful, flexible solution for serving static content. Its cross-platform compatibility, security features, and ease of use make it an useful tool for developers, system administrators, and anyone needing a quick and reliable HTTP server. Whether for local development, testing, or simple file sharing, this Rust-based Simple HTTP Server provides a robust and efficient option.

Resource:

Related Read:

You May Also Like

Leave a Comment

* By using this form you agree with the storage and handling of your data by this website.

This site uses Akismet to reduce spam. Learn how your comment data is processed.

This website uses cookies to improve your experience. By using this site, we will assume that you're OK with it. Accept Read More