blog icon indicating copy to clipboard operation
blog copied to clipboard

使用 Nginx 部署静态网站(含配置 HTTPS)

Open qingquan-li opened this issue 5 years ago • 0 comments

环境:

  • Ubuntu 16.04 LTS (腾讯云服务器)
  • Nginx 1.16.1

一、安装 Nginx

Nginx 是一个Web服务器,是一个反向代理工具,我们通常用它来部署静态文件。

参考:

# Ubuntu官方列表的Nginx版本不一定是最新的。所以请添加Nginx安装列表:
# 这一步不是必须的,但建议执行,不然安装的Nginx版本会挺旧的。
$ sudo add-apt-repository ppa:nginx/stable

# 更新列表
$ sudo apt-get update

# 安装 Nginx
$ sudo apt-get install nginx
$ nginx -v       # 查看Nginx版本号
$ dpkg -L nginx  # 查看Nginx安装位置,输出/usr/share/doc/nginx。其他文件在/etc/nginx
$ dpkg --list    # 查看已安装的包
$ sudo apt-get remove nginx nginx-common  # 删除Nginx(保留配置文件)
$ sudo apt-get purge nginx nginx-common   # 删除Nginx(且不保留配置文件)
$ sudo apt-get autoremove                 # 删除依赖(dependencies)
$ service nginx status   # 查看Nginx状态,默认在运行ing
# 此时访问服务器的IP地址即可看到"Welcome to nginx!"的页面

# 每次更新 Nginx 配置后,都建议重启一下 Nginx
$ service nginx start    # Nginx启动命令
$ service nginx stop     # Nginx停止命令
$ service nginx restart  # Nginx重启命令

# Nginx默认使用80端口,请确保80端口未被其他程序占用
# 注意:需要云服务器开启相应的端口,例如腾讯云服务器开启某些端口可能需要进行安全组配置,
# 这里的腾讯云服务器默认开启80端口。
$ sudo /etc/init.d/nginx start   # 启动 nginx
$ sudo /etc/init.d/nginx restart  # 重启 nginx

二、配置 Nginx

参考:


默认方式安装的软件,配置一般都在 /etc 目录下。可以通过 $ sudo vim /etc/nginx/nginx.conf 直接编辑 Nginx 主配置文件(不推荐):在 http 模块中,添加如下 server 配置内容:

或者在 /etc/nginx/conf.d 目录下新建 domain-com.conf 配置文件(推荐),写入如下内容:

server{
    listen 80;  # 指定端口,nginx默认端口为80
    server_name domain.com;  # 指定域名
    location / {
        root /home/ubuntu/domain-com;  # 指定静态网站根目录
        index index.html;  # 指定默认访问文件
    }
}

此时,重启一下 Nginx :$ sudo /etc/init.d/nginx restart ,即可访问到 http://domain.com


附:如何更新 Nginx 配置文件

为什推荐在 /etc/nginx/conf.d 目录下新建配置文件?因为 /etc/nginx/nginx.conf 主配置文件的 http 模块中含有一下语句,在 /etc/nginx/conf.d 目录下新建的配置文件全部都会 include 到 Nginx 主配置文件中:

include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;

了解更多:直接修改 /etc/nginx/nginx.conf 主配置文件、在 /etc/nginx/sites-available 目录中新建配置文件、在 /etc/nginx/conf.d 目录中新建配置文件,的区别: Stack Exchange - What is the different usages for sites-available vs the conf.d directory for nginx


三、配置 HTTPS

参考:


首先,在 腾讯云 - SSL 证书管理控制台 中申请免费证书(或通过其他渠道申请证书),下载对应域名的证书文件(压缩包),解压缩后把 Nginx 文件夹内的证书文件和私钥文件放置到服务器:此处选择将这 2 个文件放置到服务器的 /etc/nginx/ssl-nginx-qcloud 目录中(使用 $ mkdir 新建一个 ssl-nginx-qcloud 文件夹),具体放置目录可以自行决定。

然后,接着上面第二步的"配置 Nginx",在 /etc/nginx/conf.d 目录下新建的 domain-com.conf 配置文件中,追加写入内容如下,配置 HTTPS :

server{
    listen 80;  # 指定端口,nginx默认端口为80
    server_name domain.com;  # 指定域名
    location / {
        root /home/ubuntu/domain-com;  # 指定静态网站根目录
        index index.html;  # 指定默认访问的文件
        # Nginx 支持 rewrite 功能:
        # 访问网址链接时自动追加 .html 后缀(这样,访问网址时就可以不用 .html 后缀)
        if (!-e $request_filename){
           rewrite ^(.*)$ /$1.html last;
           break;
        }
    }
    # Nginx 支持 rewrite 功能:
    # 可以将默认 80 端口的 HTTP 请求重定向为 HTTPS(可选项,可以不配置)。
    rewrite ^(.*)$ https://$host$1 permanent; 
}

# 腾讯云 https 访问配置
server {
    #SSL 访问端口号为 443
    #listen 443;
    #启用 SSL 功能
    #ssl on;
    # 由于版本问题,配置文件可能存在不同的写法。此处需要使用 listen 443 ssl 代替以上写法
    listen 443 ssl;
    #填写绑定证书的域名
    server_name domain.com;
    #证书文件名称(此处的证书文件放在 /etc/nginx/ssl-nginx-qcloud 目录下)
    ssl_certificate ./ssl-nginx-qcloud/1_domain.com_bundle.crt;
    #私钥文件名称(此处的私钥文件放在 /etc/nginx/ssl-nginx-qcloud 目录下)
    ssl_certificate_key ./ssl-nginx-qcloud/2_domain.com.key;
    ssl_session_timeout 5m;
    #请按照以下协议配置
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    #请按照以下套件配置,配置加密套件,写法遵循 openssl 标准(照抄即可不用修改)。
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
    ssl_prefer_server_ciphers on;
    location / {
        #网站主页路径。此路径仅供参考,具体请您按照实际目录操作。
        root /home/ubuntu/domain-com;
        #指定默认访问的文件
        index index.html;
        # Nginx 支持 rewrite 功能:
        # 访问网址链接时自动追加 .html 后缀(这样,访问网址时就可以不用 .html 后缀)。
        if (!-e $request_filename){
           rewrite ^(.*)$ /$1.html last;
           break;
        }
    }
}

测试 Nginx 配置文件是否正确:

$ nginx -t
$ sudo nginx -t

此时,重启一下 Nginx ,即可访问到 https://domain.com

qingquan-li avatar Dec 18 '19 16:12 qingquan-li