Issue
Some server setups enforce that all outgoing traffic is routed trough a proxy. This setup is applied to increase the security by restricting what and to whom a connection can be opened.
Resolution
We use an HTTP client which allows to route the traffic through a proxy. However the proxy configuration has to be provided through an environment variable. This environment variable can be defined in different ways:
- The environment variable is defined in the server configuration (e.g. in the virtual host configuration of the shop domain).
- The environment variable is defined in a
.htaccess
file located in the shop directory. - The environment variable is defined in some
PHP
file which is always loaded.
Which solution fits the best depends on the server setup and the way the shop is maintained. The environment variable has to
be called PHP_HTTP_CLIENT_PROXY_URL
and it has to contain an URL which contains optionally a username and a password. The URL
has the following schema:
https://username:password@ip-or-domain-of-the-proxy.com:port
The username
is the login name of the proxy server and the password
the corresponding password. The port
indicates to which port we have to connect to on the proxy server. The protocol can be either http
or https
. This
depends on the proxy server setup.
We use internally the function stream_socket_client
to open the socket. We pass the settings you provide through the
environment variable to the function stream_context_create
as specified in
PHP documentation.
Setup Environment Variable in the Server Configuration
The definition of a environment variable on a web server level depends on the web server. Below you find such a configuration for an Apache 2 web server:
SetEnv PHP_HTTP_CLIENT_PROXY_URL "https://username:password@ip-or-domain-of-the-proxy.com:port"
The above line should be added within the virtual host configuration which is applied to the shop. This
should be set before any rewrite rules. Otherwise the variable may not be set. Important: To use this
functionality you must have enabled the Apache module mod_env
. Otherwise this will give you an
error.
Setup Environment Variable in .htaccess
When an Apache web server is used normally it is possible to use a .htaccess
file which
may be used to define the environment variable. The following line should be added within the
.htaccess
before any rewrite rule is applied.
SetEnv PHP_HTTP_CLIENT_PROXY_URL "https://username:password@ip-or-domain-of-the-proxy.com:port"
This only works when the Apache module mod_env
has been enabled in the web server.
Setup Environment Variable in a PHP
file
If non of the above method works for you an other option is to use a snippet which can be inserted
into a PHP
file:
$_SERVER['PHP_HTTP_CLIENT_PROXY_URL'] = "https://username:password@ip-or-domain-of-the-proxy.com:port"
It is recommended to put the above snippet in a file which you will typically not replace when you update
the shopping cart. If the database credentials are stored in a PHP
file this may be a good location to put
it.
Verification
To verify if the environment variable has been configured correctly you can use the following PHP
snippet:
echo $_SERVER['PHP_HTTP_CLIENT_PROXY_URL'];
If this prints the proxy URL the environment variable has been setup correctly.