servlet provides the option to choose which files from user to serve # The following code shows how to serve them from the folder 'myapp' root = File.expand_path '/var/myapp/' # Instantiating a new server with HTTPServer.new on port 1234 serving the documents from root folder server = WEBrick::HTTPServer.new :Port => 1234, :DocumentRoot => root # The following proc is used to customize the server operations server.mount_proc '/' do |request, response| response.body = 'Hello, world!' end # The following command will provide a hook to shut down the server (often done with Ctrl+C) trap('INT') {server.shutdown} # Start the server server.start Servlets can be mounted to provide advanced custom behavior as compared to a proc, to increase the modularity. Starting a virtual host WEBrick creates a listening port. Various other ports as ‘virtual hosts’ can also be created at the same time which do not listen as shown below: #Creating a virtual host that doesn't listen vhost = WEBrick::HTTPServer.new :ServerName => 'vhost.example', :DoNotListen => true, # ... # Mounting the virtual host created above similar to the way HTTP server was mounted vhost.mount '/', ... # This host, when mounted to the listening server host, will now act as a virtual host server.virtual_host vhost :DocumentRoot should be provided or an instance of a servlet should be set up to service a request URI; otherwise a 404 error will be returned. Instantiating an HTTPS server By just enabling SSL and providing an SSL certificate name, an HTTPS server can be initiated with a self-signed certificate that changes with every restart of the server. # In addition to webrick, we will require webrick/https too for SSL functionalities require 'webrick' require 'webrick/https' # Providing certificate name. This, however, will be a self-generated self-signed certificate cert_name = [%w[CN localhost],] # Enabling SSL and providing the certificate name will instantiate HTTPS server server = WEBrick::HTTPServer.new(:Port => 1234, :SSLEnable => true, :SSLCertName => cert_name) However, a pre-determined key and certificate can also be provided for instantiating HTTPS Server as shown below: # In addition to the above two, we'll need openssl to read SSL certificates and keys require 'openssl' # Read the saved certificate and its signature key from the local directory cert = OpenSSL::X509::Certificate.new File.read '/var/myapp/cert.pem' pkey = OpenSSL::PKey::RSA.new File.read '/var/myapp/pkey.pem' # Pass the certificate and the key as separate parameters while instantiating with HTTPServer.new server = WEBrick::HTTPServer.new(:Port => 1234, :SSLEnable => true, :SSLCertificate => cert, :SSLPrivateKey