How to Set up Your Own Web Proxy on Ubuntu 16.04 VPS

This tutorial shows you how to set up your own web proxy on Ubuntu 16.04. A web proxy is a website where a user enters a specific URL to unblock website. There are a multitude of web proxy scripts that can be used to set up your own web proxy. Glype and PHP-Proxy will be used in this tutorial. Glype is a very popular web proxy script and PHP-Proxy is a good alternative. You can choose one of them. In my test, PHP-Proxy is faster and works better with popular websites like Facebook, Twitter and YouTube, because it’s being actively updated. We will see how to set them up with Apache/Nginx and enable HTTPS with Let’s Encrypt.

set up your own web proxy

Normally I use Shadowsocks proxy and OpenConnect VPN to bypass Internet censorship, but there’s possibility that these two tools would be blocked in my country. Web proxy is a good backup method as it doesn’t have any characteristics of SOCKS proxy and VPN. In the eyes of Internet firewall, it’s just normal HTTPS traffic. There are tens of thousands of free web proxies online. The downside is that once those public web proxies become well-known, they can be easily blocked. Setting up your own private web proxy has the advantage that only you know its existence.

Prerequisites

To follow this tutorial, you will need:

Step 1: Install Web Server and PHP

SSH into your Ubuntu 16.04 VPS. If you like to use Nginx as web server, then nstall Nginx and PHP7 by executing the following command.

sudo apt install nginx php7.0-fpm php7.0-curl php7.0-mbstring php7.0-xml php7.0-zip

If you like to use Apache as web server, run

sudo apt install apache2 php7.0 libapache2-mod-php7.0 php7.0-curl php7.0-mbstring php7.0-xml php7.0-zip

Step 2: Download Glype or PHP-Proxy

Glype

Download Glype by running the following command.

wget https://www.php-proxy.com/download/glype-1.4.15.zip

Extract it to /var/www/proxy/ directory.

sudo apt install unzip

sudo mkdir -p /var/www/proxy/

sudo unzip glype-1.4.15.zip -d /var/www/proxy/

Set www-data (web server user) as the the owner.

sudo chown www-data:www-data /var/www/proxy/ -R

PHP-Proxy

We can use Composer to download PHP-Proxy. Install Composer from Ubuntu 16.04 repository.

sudo apt install composer

Then download PHP-Proxy to /var/www/proxy/ directory.

sudo mkdir -p /var/www/proxy/

sudo composer create-project athlon1600/php-proxy-app:dev-master /var/www/proxy/

Set www-data (web server user) as the the owner.

sudo chown www-data:www-data /var/www/proxy/ -R

Step 3: Configure Web Server

In this step, we need to create a Nginx server block or Apache virtual host for our web proxy.

Create Nginx Server Block

Create a server block under /etc/nginx/conf.d/ directory.

sudo nano /etc/nginx/conf.d/web-proxy.conf

Copy and paste the following lines into the file. Replace proxy.example.com with your real domain name. Don’t forget to set A record in your DNS manager.

server {
        listen 80;
        server_name proxy.example.com;

        root /var/www/proxy/;
        index index.php;

        location / {
          try_files $uri $uri/ /index.php;
        }

         location ~ \.php$ {
                fastcgi_pass unix:/run/php/php7.0-fpm.sock;
                fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                include fastcgi_params;
                include snippets/fastcgi-php.conf;
        }
}

Save and close the file. Then test Nginx configurations.

sudo nginx -t

If the test is successful, reload Nginx for the changes to take effect.

sudo systemctl reload nginx

Create Apache Virtual Host

Create Apache virtual host in /etc/apache2/sites-avaialable/ directory.

sudo nano /etc/apache2/sites-available/web-proxy.conf

Copy and paste the following lines into the file. Replace proxy.example.com with your real domain name. Don’t forget to set A record in your DNS manager.

<VirtualHost *:80>        
        ServerName proxy.example.com

        DocumentRoot /var/www/proxy

        ErrorLog ${APACHE_LOG_DIR}/proxy.error.log
        CustomLog ${APACHE_LOG_DIR}/proxy.access.log combined
</VirtualHost>

Save and close the file. Then enable this virtual host.

sudo a2ensite web-proxy.conf

Reload Apache for the changes to take effect.

sudo systemctl reload apache2

The Web Interface

Now visit proxy.example.com in your web browser. If you use Glype, then you will be redirected to admin control panel (proxy.example.com/admin.php).

glype web proxy

If you use PHP-Proxy, you can see a working web proxy waiting for you to enter a URL.

php-proxy

Now let’s enable HTTPS with Let’s Encrypt.

Step 4: Enable HTTPS with Let’s Encrypt for Your Web Proxy

We can install Let’s Encrypt client (certbot) from the official PPA by executing the following commands.

sudo apt install software-properties-common

sudo add-apt-repository ppa:certbot/certbot

sudo apt update

sudo apt install certbot

Nginx users also need to install the Certbot Nginx plugin.

sudo apt install python-certbot-nginx

Enable HTTPS with the Nginx plugin.

sudo certbot --nginx --agree-tos --redirect --staple-ocsp -d proxy.example.com --email your-email-address

Apache users need to install the Certbot Apache plugin.

sudo apt install python-certbot-apache

Enable HTTPS with the Apache plugin.

sudo certbot --apache --agree-tos --redirect --staple-ocsp -d proxy.example.com --email your-email-address

If you get the following error message.

Client with the currently selected authenticator does not support any combination of challenges that will satisfy the CA.

Please check out this post on Let’s Encrypt forum to fix it.

Once the certificate is successfully installed, refresh your proxy in your web browser to use HTTPS.

That’s it! I hope this tutorial helped you create your own web proxy on Ubuntu 16.04. As always, if you found this post useful, then subscribe to our free newsletter to get more tips and tricks.

Rate this tutorial
[Total: 23 Average: 3.7]

14 Responses to “How to Set up Your Own Web Proxy on Ubuntu 16.04 VPS

  • MrAdminus
    6 months ago

    Thank you so much for this great tutorial, upreaciate it very much!

  • Ferdinand Setiawan
    6 months ago

    I have install my own privateGlype proxy site and it works when I using it from the url form.
    My question is,
    Instead of submitting to the url form using POST method, Can I connect to the proxy using GET method from my php code?
    Something usual like : http://glypeproxy.site/index.php?e=url_to_visit
    Thanks!

  • Motion John
    6 months ago

    How do I set A record in DNS manager for Android 7?

    • Xiao Guo-An (Admin)
      6 months ago

      You need to have your own domain name and set A record in the web-based DNS manager of your domain registrar.

    • Your VPS may have a hostname at your hosting provider’s control panel, but it’s usually not public accessible, unless you buy a domain name from a domain registrar.

  • Al Coholic
    6 months ago

    I have a problem.
    Do I need nginx and apachy or just one of them?
    I tried to install curl, nging and unpacked glype but i can’t get it to work.
    I get a nginx welcome unconfigured page.
    I then adjust config file to point to domain (example.com equivalent) and restart but i then get 500 error.

    • Xiao Guo-An (Admin)
      6 months ago

      You need to install only one web server. I personally use Nginx. You can check your web server log to find out what’s wrong.

  • 写的很好. 不过PHP-PROXY好像不支持Html播放器….有什么方法可以调式嘛?

  • Hi, could you please do a tutorial on setting up a DNS Server with ubuntu? Always love learning from your articles, Thank you

  • great tutorial, really enjoying browsing your website

  • Lee Ward
    3 days ago

    You are a star Linuxbabe – great work. Particularly like that you always try and offer more than one option, for example Nginx or Apache. Keep it up.

Leave a Comment

  • Comments with links are moderated by admin before published.
  • Your email address will not be published.
  • Use <pre> ... </pre> HTML tag to quote the output from your terminal/console.
  • If my answer helped you, please consider supporting this site. Thanks :)