You can serve static content (HTML, CSS, JavaScript, and image files) directly from a container in a general-purpose v2 or BlockBlobStorage account. To learn more, see Static website hosting in Azure Storage.
This article shows you how to enable static website hosting by using the Azure portal, the Azure CLI, or PowerShell.
Enable static website hosting
Enable static website hosting on the storage account.
Sign in to the Azure portal.
Locate your storage account and select it to display the account's Overview pane.
In the Overview pane, select the Capabilities tab. Next, select Static website to display the configuration page for the static website.
Select Enabled to enable static website hosting for the storage account.
In the Index document name field, enter a default index page (for example, index.html).
The default index page appears when you navigate to the root of your static website.
In the Error document path field, enter a default error page (for example, 404.html).
The default error page appears when you navigate to a page that doesn't exist in your static website.
Select Save to finish the static site configuration.
After you save the configuration, a confirmation message appears. The Overview pane shows your static website endpoints and other configuration information.
You can enable static website hosting by using the Azure CLI.
First, open the Azure Cloud Shell, or if you've installed the Azure CLI locally, open a command console application such as Windows PowerShell.
If your identity is associated with more than one subscription, set your active subscription to the subscription of the storage account that hosts your static website. Replace the <subscription-id> placeholder value with the ID of your subscription.
az account set --subscription <subscription-id>
Replace the <subscription-id> placeholder value with the ID of your subscription.
Enable static website hosting.
az storage blob service-properties update --account-name <storage-account-name> --static-website --404-document <error-document-name> --index-document <index-document-name>
Replace the <storage-account-name> placeholder value with the name of your storage account.
Replace the <error-document-name> placeholder with the name of the error document that appears when a browser requests a page on your site that doesn't exist.
Replace the <index-document-name> placeholder with the name of the index document. This document is commonly index.html.
You can enable static website hosting by using the Azure PowerShell module.
Open a Windows PowerShell command window.
Verify that you have Azure PowerShell module Az version 0.7 or later.
Get-InstalledModule -Name Az -AllVersions | Select-Object Name, Version
If you need to install or upgrade, see Install Azure PowerShell module.
Sign in to your Azure subscription with the Connect-AzAccount command and follow the on-screen directions.
Connect-AzAccount
If your identity is associated with more than one subscription, set your active subscription to the subscription of the storage account that hosts your static website.
$context = Get-AzSubscription -SubscriptionId <subscription-id>
Set-AzContext $context
Replace the <subscription-id> placeholder value with the ID of your subscription.
Get the storage account context that defines the storage account you want to use.
$storageAccount = Get-AzStorageAccount -ResourceGroupName "<resource-group-name>" -AccountName "<storage-account-name>"
$ctx = $storageAccount.Context
Enable static website hosting.
Enable-AzStorageStaticWebsite -Context $ctx -IndexDocument <index-document-name> -ErrorDocument404Path <error-document-name>
Replace the <error-document-name> placeholder with the name of the error document that appears when a browser requests a page on your site that doesn't exist.
Replace the <index-document-name> placeholder with the name of the index document. This document is commonly index.html.
Upload files
The following instructions show you how to upload files by using the Azure portal. You can also use AzCopy, Azure PowerShell, Azure CLI, or a custom application to upload files to the $web container of your account. For a step-by-step tutorial that uploads files by using Visual Studio Code, see Tutorial: Host a static website on Blob Storage.
In the Azure portal, navigate to the storage account containing your static website. Select Containers in the left navigation pane to display the list of containers.
In the Containers pane, select the $web container to open the container's Overview pane.
In the Overview pane, select Upload. In the Upload blob pane, select the Files field to open the file browser. Navigate to the file, select it, and then select Open. Optionally, select Overwrite if files already exist.
If you intend for the browser to display the contents of the file, ensure that the content type of that file is set to text/html. To verify this setting, select the name of the blob you uploaded in the previous step to open its Overview pane. Ensure that the value is set within the CONTENT-TYPE property field.
Note
This property is automatically set to text/html for commonly recognized extensions such as .html. However, in some cases, you might need to set it yourself. If you don't set this property to text/html, the browser prompts users to download the file instead of rendering the contents. You can set this property in the previous step.
Upload objects to the $web container from a source directory.
This example assumes that you're running commands from an Azure Cloud Shell session.
az storage blob upload-batch -s <source-path> -d '$web' --account-name <storage-account-name>
Note
If the browser prompts you to download the file instead of rendering the contents, append --content-type 'text/html; charset=utf-8' to the command.
Note
If you're using a local installation of Azure CLI, use the path to any location on your local computer (for example, C:\myFolder).
If you're using Azure Cloud Shell, reference a file share that's visible to Cloud Shell. This location can be the file share for Cloud Shell itself or an existing file share that you mount from Cloud Shell. To learn how to do this, see Persist files in Azure Cloud Shell.
Upload objects to the $web container from a source directory.
# Upload a file
Set-AzStorageBlobContent -File "<path-to-file>" `
-Container '$web' `
-Blob "<blob-name>" `
-Context $ctx
Note
If the browser prompts you to download the file instead of rendering the contents, append -Properties @{ ContentType = "text/html; charset=utf-8";} to the command.
Replace the <path-to-file> placeholder value with the fully qualified path to the file that you want to upload (for example, C:\temp\index.html).
Replace the <blob-name> placeholder value with the name that you want to give the resulting blob (for example, index.html).
Find the website URL
You can view the pages of your site from a browser by using the public URL of the website.
In the pane that appears beside the account overview page of your storage account, select Static Website. The URL of your site appears in the Primary endpoint field.
Find the public URL of your static website by using the following command:
az storage account show -n <storage-account-name> -g <resource-group-name> --query "primaryEndpoints.web" --output tsv
Find the public URL of your static website by using the following command:
$storageAccount = Get-AzStorageAccount -ResourceGroupName "<resource-group-name>" -Name "<storage-account-name>"
Write-Output $storageAccount.PrimaryEndpoints.Web
Enable metrics on static website pages
After you enable metrics, the metrics dashboard reports traffic statistics for files in the $web container.
Select Metrics under the Monitor section of the storage account menu.
Note
The portal shows only API members that return data in the selected time frame. Expand the time frame to make the necessary API member available.
Select the time frame button, select a time frame, and then select Apply.
Select Blob from the Namespace dropdown.
Select the Egress metric.
Select Sum from the Aggregation selector.
Select Add filter, and then select API name from the Property selector.
Select the checkbox next to GetWebContent in the Values selector to populate the metrics report.
Note
The GetWebContent checkbox appears only if that API member was used within the selected time frame. If you can't find it, expand the time frame.
Next steps