Reverse Proxy Setup
This documentation applies when OneDev is running in container or running on virtual machine/bare metal
You may configure OneDev to run behind Nginx or Apache Httpd to do reverse proxying. Below procedure assumes you are running Nginx or Apache Httpd on Ubuntu:
Nginx
Assume your OneDev instance runs at port 6610, and you want to access it via http://onedev.example.com. Create a file named onedev.example.com with below content under directory /etc/nginx/sites-available:
server {
listen 80;
listen [::]:80;
server_name onedev.example.com;
# no size limit of uploaded file
client_max_body_size 0;
location /wicket/websocket {
proxy_pass http://localhost:6610/wicket/websocket;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
location /~server {
proxy_pass http://localhost:6610/~server;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
location /~api/streaming {
proxy_pass http://localhost:6610/~api/streaming;
proxy_buffering off;
}
location / {
proxy_pass http://localhost:6610/;
}
}Then, enable this site and restart Nginx server:
sudo ln -s /etc/nginx/sites-available/git.example.com /etc/nginx/sites-enabled/onedev.example.com
sudo service nginx restart
Apache Httpd
Make sure you have Apache httpd server version 2.4.5 or higher installed
Enable mod_proxy by running:
sudo a2enmod proxy_http
Enable mod_proxy_wstunnel by running:
sudo a2enmod proxy_wstunnel
Now assume your OneDev instance runs at port 6610, and you want to access it via http://onedev.example.com. Create a file named onedev.example.com.conf with below content under /etc/apache2/sites-available:
<VirtualHost *:80>
ServerName onedev.example.com
ProxyRequests Off
ProxyPreserveHost Off
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
ProxyWebsocketFallbackToProxyHttp off
ProxyPass /wicket/websocket ws://localhost:6610/wicket/websocket
ProxyPass /~server ws://localhost:6610/~server
ProxyPass / http://localhost:6610/
ProxyPassReverse / http://localhost:6610/
<Location />
Order allow,deny
Allow from all
</Location>
ErrorLog /var/log/apache2/onedev-error.log
CustomLog /var/log/apache2/onedev-access.log combined
LogLevel warn
</VirtualHost>Then, enable this site and restart Apache httpd server:
sudo a2ensite onedev.example.com.conf
sudo service apache2 restart
Caddy Server
Running OneDev behind Caddy server is really simple, just start your caddy server as a reverse proxy:
caddy reverse-proxy --from onedev.example.com --to localhost:6610
Here we assume that OneDev is running at port 6610, and also you have a DNS record mapping onedev.example.com
to ip address of the machine running OneDev and Caddy server
IIS
Install IIS and Prerequisites
Windows Server
- Open Server Manager
- Click on
Manage
- Select
Add Roles and Features
- Navigate to
Server Roles
- Select
Web Server (IIS)
- Expand
Web Server
- Expand
Application Development
- Select
WebSocket Protocol
- Select
- Expand
- Install the Windows Features
- Install Aplication Request Routing
- Install URL Rewrite
Windows 10/11
- Open
Turn Windows features on or off
- Place a checkmark on
Internet Information Services
- Exand
Internet Information Services
- Expand
World Wide Services
- Expand
World Wide Web Services
- Expand
Application Development Features
- Select
WebSocket Protocol
- Expand
- Expand
- Expand
- Click
OK
- Install Aplication Request Routing
- Install URL Rewrite
Configuring IIS
Open IIS Manager, expand
Sites
and create a new siteSet
Site Name
to your preferred site nameSet your
Physical Path
to the your preferred location (e.g.:C:\inetpub\wwwroot\onedev
)Set
Binding
tohttp
If you prefer to use
https
, you'd need to ensure you have a valid certificate in the computer certificate store.infoConfiguring HTTPS for IIS is outside of the scope for this guide.
Set
Host name
to your preferred host name (e.g.:git.mydomain.com
)Create a new file called
web.config
at the root of yourPhysical Path
and copy/paste the following:For HTTP you can use the following example:
<configuration>
<system.webServer>
<rewrite>
<rules>
<rule name="WebSocket" stopProcessing="true">
<match url="wicket/websocket/(.*)" />
<action type="Rewrite" url="ws://localhost:6610/wicket/websocket/{R:1}" />
</rule>
<rule name="Server" stopProcessing="true">
<match url="~server/(.*)" />
<action type="Rewrite" url="ws://localhost:6610/~server/{R:1}" />
</rule>
<rule name="Default" stopProcessing="true">
<match url="(.*)" />
<action type="Rewrite" url="http://localhost:6610/{R:1}" />
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>For HTTPS you can use the following example:
<configuration>
<system.webServer>
<rewrite>
<rules>
<rule name="WebSocket" stopProcessing="true">
<match url="wicket/websocket/(.*)" />
<action type="Rewrite" url="wss://localhost:6610/wicket/websocket/{R:1}" />
</rule>
<rule name="Server" stopProcessing="true">
<match url="~server/(.*)" />
<action type="Rewrite" url="wss://localhost:6610/~server/{R:1}" />
</rule>
<rule name="Default" stopProcessing="true">
<match url="(.*)" />
<action type="Rewrite" url="http://localhost:6610/{R:1}" />
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>
infoThe
web.config
was made using the provided NGINX and Apache examples. You might need to make changes according to your environment.
Restart your web server and verify that you can access your OneDev instance.