# Create Microsoft Azure virtual machines for NGINX Open Source and F5 NGINX Plus




This topic describes how to create Microsoft Azure virtual machines (VMs) to run NGINX Open Source or NGINX Plus.

The names and settings in this document are consistent with [Active-Active HA for NGINX Plus on Microsoft Azure Using the Azure Standard Load Balancer](/nginx/deployment-guides/microsoft-azure/high-availability-standard-load-balancer.md), but these VMs can be used for any purpose.

For faster NGINX Plus deployments, you can get a prebuilt VM from the [Microsoft Azure Marketplace](https://azuremarketplace.microsoft.com/en-us/marketplace/apps?search=NGINX%20Plus).

View the [Installing NGINX Plus on Microsoft Azure](nginx/admin-guide/installing-nginx/installing-nginx-plus-microsoft-azure.md) topic for more details. 

## Before you begin

To complete this guide, you will need the following prerequisites:

- An Azure [account](https://azure.microsoft.com/en-us/free/).
- An Azure [subscription](https://docs.microsoft.com/en-us/azure/azure-glossary-cloud-terminology?toc=/azure/virtual-network/toc.json#subscription).
- An Azure [resource group](https://docs.microsoft.com/en-us/azure/azure-resource-manager/resource-group-overview#resource-groups): in this topic, it is called **NGINX-Plus-HA**.
- An Azure [virtual network](https://docs.microsoft.com/en-us/azure/virtual-network/virtual-networks-overview).
- `root` access or `sudo` privilege on your preferred host

If you wish to use NGINX Plus, you will need an NGINX Plus subscription (Paid or trial).

## Create a Microsoft Azure virtual machine

To begin, log in to the [Microsoft Azure portal](https://portal.azure.com/).

Then select **Virtual machines** from the landing page of the Microsoft Azure portal, or the menu in the top-left corner of the page.

![The top of the Microsoft Azure portal, showing a row of available services. The second item in the row is Virtual machines option and icon](/nginx/images/azure-portal.png)

On the Virtual machines page, select **+ Add** in the upper left corner.

![The top of the Virtual machines page, which has a menu of interactive items starting with an Add button](/nginx/images/azure-create-vm-add-button.png)

In the **Create a virtual machine** window that opens, enter the following information on the **Basics** tab:

| Name | Value |
| ---- | ----- |
| Subscription | NGINX-Plus-HA-subscription |
| Resource group | NGINX-Plus-HA |
| Virtual machine name | ngx-plus-1 **(1)** |
| Region | (US) West US 2 |
| Availability options | No infrastructure redundancy required **(2)** |
| Image | Ubuntu Server 18.04 LTS |
| Azure Spot instance | No |
| Size | B1s **(3)** |
| Authentication type | SSH public key |
| Username | nginx_azure |
| SSH public key source | Generate new key pair |
| Key pair name | nginx_key |
| Public inbound ports | Allow selected ports |
| Select inbound ports | **(4)** |

1. The value **ngx-plus-1** is one of the six used for VMs in [Active-Active HA for NGINX Plus on Microsoft Azure Using the Azure Standard Load Balancer](high-availability-standard-load-balancer.md).
1. This option is suitable for testing. For production deployments we recommend deploying a copy of each VM in a different Availability Zone.
1. Select _Select size_ to access the _Select a VM size_ window, choose the _B1s_ row, and press the _Select_ button to return to the _Basics_ tab.
1. Select **SSH (22)** and **HTTP (80)** from the drop-down menu. You should also select **HTTPS (443)** if you plan to configure NGINX and NGINX Plus for SSL/TLS.

![The 'Basics' tab of the 'Create a virtual machine' page, showing the form of parameters to fill](/nginx/images/azure-create-vm-basics.png)

Once you have filled out the information of the _Basics_ tab, select the _Networking_ tab underneath the page heading.

Select  _Create new_ below the **Public IP** field, then select the **Standard Radio button** under **SKU** inn the **Create public IP address column** that opens.

In the **Name** field, accept the default created by Azure, _ngx-plus-1-ip_, and confirm it by selecting **Ok**.

**Note:** 

If you are creating VMs to use with [Active-Active HA for NGINX Plus](/nginx/deployment-guides/microsoft-azure/high-availability-standard-load-balancer.md), the two VMs must have public IP addresses with SKU type **Standard** instead of the default **Basic**.

If you’re creating 6 VMs for [Active-Active HA for NGINX Plus](high-availability-standard-load-balancer.md), use the following names:

- **ngx-plus-1**
- **ngx-plus-2**
- **ngx-oss-app1-1**
- **ngx-oss-app1-2**
- **ngx-oss-app2-1**
- **ngx-oss-app2-2**

For _ngx-plus-2_, repeat the previous steps or get a pre built VM from the [Microsoft Azure Marketplace](https://azuremarketplace.microsoft.com/en-us/marketplace/apps?search=NGINX%20Plus)).

For the _ngx-oss-*_, you can create each VM manually or follow the [Create an NGINX Open Source image](#create-an-an-nginx-open-source-image) steps to clone additional copies.

![The 'Networking' tab of Azure's 'Create a virtual machine' page](nginx/images/azure-create-vm-networking.png)

Before continuing, there are some values you may wish to change from the default under the  **Disks**, **Networking**, **Management**, **Advanced**, and **Tags** tabs. 

By default, Azure assigns **Premium SSD** for the OS disk on the disk tab, but you can choose a cheaper option like **Standard HDD**.

After you've completed your changes, select _Review + create_ at the bottom of the **Create a virtual machine** page.

Your settings will be summarized under the **Validation passed** banner. Ensure they’re correct, then select **Create**. 

Based on the setting in the _Basics_ tab, a _Generate new key pair_ window will appear. Select _Download key and create private resource_.

![The 'Review + create' tab of the 'Create a virtual machine' page page](/nginx/images/azure-create-vm-validation-passed.png)

The VM deployment will take a few minutes, after which you will see a summary of your resources.

![The overview screen of a deployment, showing the resources created during the process](/nginx/images/azure-create-vm-deployment-complete.png)

## Connect to the virtual machine

To install and configure NGINX Open Source or NGINX Plus on a VM, you will need to connect to the VM with SSH. 

Go to the **Virtual machines** page on the Azure dashboard and click the VM's name in the **Name** column of the table.

![The 'Virtual machines' page, showing a single item named 'nginx-plus-1'](/nginx/images/azure-create-vm-virtual-machines.png)

On the page that opens (**ngx-plus-1** in this example), note the VM's public IP address (In the **Public IP address** field in the right column).

![The page for the 'nginx-plus-1' virtual machine, showing its details](/nginx/images/azure-create-vm-ngx-plus-1.png)

Run this command to confirm an SSH connection to the VM:

```shell
ssh -i <private-key-file> <username>@<public-IP-address>
```

- `<private-key-file>` contains the private key paired with the public key you entered in the _SSH public key_ field during _Create a Microsoft Azure virtual Machine_
- `<username>` is the name you entered in the **Username** field during _Create a Microsoft Azure virtual Machine_. In this example, it is _nginx_azure_.
- `<public-IP-address>` is the address you found during the previous step.

## Install NGINX Open Source or NGINX Plus

After you’ve successfully connected to your Azure VM, you can install NGINX Open Source or NGINX Plus on it.

- [Installing NGINX Open Source](/nginx/admin-guide/installing-nginx/installing-nginx-open-source.md)
- [Installing NGINX Plus](/nginx/admin-guide/installing-nginx/installing-nginx-plus.md)

## Install NGINX Open Source or NGINX Plus with Ansible

**Note:** 

For Chef and Puppet, see the following articles on the NGINX blog:

- [Installing NGINX and NGINX Plus with Chef](https://www.nginx.com/blog/installing-nginx-nginx-plus-chef/)
- [Deploying NGINX Plus for High Availability with Chef](https://www.nginx.com/blog/nginx-plus-high-availability-chef/)
- [Installing NGINX and NGINX Plus with Puppet](https://www.nginx.com/blog/installing-nginx-nginx-plus-puppet/)

NGINX provides automatic setup files for Open Source and Plus versions on [Ansible Galaxy](https://galaxy.ansible.com/nginxinc/nginx/) and [GitHub](https://github.com/nginxinc/ansible-role-nginx). 

The following instructions use the _apt_ package manager, and should be adapted to your operating system.

You should first [connect to the virtual machine](#connect-to-the-virtual-machine), then install Ansible:

```shell
apt update
apt install python-pip -y
pip install ansible
```

Once Ansible is installed, you can use `ansible-galaxy` to install the official Ansible role from NGINX:

```shell
ansible-galaxy install nginxinc.nginx
```

**Note:** 

If you are using NGINX Plus, at this stage you should copy the **nginx-repo.key** and **nginx-repo.crt** files from [MyF5](https://my.f5.com/manage/s/) to **~/.ssh/ngx-certs/**.

Create a file called **playbook.yml** with the following contents:

```yaml
---
- hosts: localhost
   become: true
   roles:
      - role: nginxinc.nginx
```

Then use `ansible-playbook` to run it:

```shell
ansible-playbook playbook.yml
```

## Create an an NGINX Open Source image

If you've [Installed NGINX Open Source](/nginx/admin-guide/installing-nginx/installing-nginx-open-source.md) correctly on one VM, you can save it as an Azure template to make additional copies, avoiding the need to follow the full installation process.

Navigate to the **Virtual machines** page, then select the name of the VM to use as a source image in the list (Named **ngx-oss** in this example).

On the details page that opens, select the **Capture** icon in the top navigation bar.

![The details page for the 'nginx-oss' VM in Azure](/nginx/images/azure-create-image-ngx-oss.png)

If you use one of the VMs you created in [Create a Microsoft Azure virtual machine](#create-a-microsoft-azure-virtual-machine) as the source for the image, you will need to re‑create a VM with that name.

Then edit the following values:

- **Name** – Keep the current value.
- **Resource group** – Select the appropriate resource group from the drop‑down menu (**NGINX-Plus-HA**)
- **Automatically delete this virtual machine after creating the image** – Yes
- **Zone resiliency** – **On**
- **Type the virtual machine name** – Name of the source VM (**ngx-oss** in this guide)

After reviewing the changed values, select the **Create** button.

![The 'Create image' page for the 'nginx-oss' VM](/nginx/images/azure-create-image-create-image.png)

### Create a virtual machine from an NGINX Open Source image

Once the Azure image has been deployed, you can use it to create VMs with NGINX Open Source pre-installed.

Navigate to the **Images** page of the Microsoft Azure portal.

![The 'Images' page of the Microsoft Azure portal](/nginx/images/azure-create-image-images.png)

Select the image name in the table, then select **+ Create VM** at the top of the main screen of the next page.

![The 'Details' page of the 'nginx-oss-image'](/nginx/images/azure-create-image-create-vm.png)

The **Create a VM** page is identical to the one from [Create a Microsoft Azure virtual machine](#create-a-microsoft-azure-virtual-machine), but will have some pre-filled fields from your image.

For example, the **Image** field now shows the image name instead of an operating system. 

You can continue finishing the VM creation process as normal from here, re-using the image whenever necessary.

## Revision History

- Version 2 (December 2025) – Revised version
- Version 1 (September 2020) – Initial version (NGINX Plus Release 22)

