很多场景下需要可以通过浏览器访问静态网页,不想把服务器ip地址直接暴露出来,通过nginx可以解决这个问题。

实现http域名访问静态网页

1.域名解析配置(本文都是以阿里云为例,其他平台,操作步骤类似)

进入阿里云的域名解析页面,配置域名指向的服务器地址(记录类型选择A,记录值填写服务器ip,记得把服务器的80端口开放)

​      ​ 

修改nginx配置文件,重启nginx,这样通过http域名就可以访问网页资源了

server {
        listen 80; # 访问不带端口号时,默认是80端口
        server_name www.dishuizhiyi.top; # 刚刚配置的域名
        location / {
                root   /app/web/demoPage; # 静态网页资源放置的文件夹(服务器上的位置)
                # 默认访问index页面
                try_files $uri $uri/  /index.html; 
                index  index.html index.htm;
        }
}

# 检查文件格式是否正确
$ /usr/local/nginx/sbin/nginx -t
# 重启nginx
$ /usr/local/nginx/sbin/nginx -s reload

页面访问情况如下

实现https域名访问静态网页

https需要配置证书,保证安全性,首先购买证书(阿里云提供了免费的证书,本文就以此为例)

1.购买证书(进入SSL证书页面,购买证书;然后选择单域名、DV SSL、免费版进行购买)

​     

2.购买完成后控制台列表会有一条未签发的记录,点击证书申请


3.填写证书申请信息,然后点击下一步,出现验证信息,需要进行验证(域名解析中配置解析)

​       

4.域名解析页面配置解析记录(类型为TXT,记录值为证书验证信息中的记录值),配置好后,点击验证,提示验证成功。

  ​         

5.下载证书(因为使用的是Nginx,所以下载Nginx对应的证书文件),下载好后上传到服务器。

6.配置Nginx的配置文件(服务器需要开放443端口<https访问端口>)

server {
        listen       443 ssl; # 监听端口
        server_name  www.dishuizhiyi.top;
        # 证书文件
        ssl_certificate      /usr/local/nginx/cert/top.pem;
        ssl_certificate_key  /usr/local/nginx/cert/top.key;

        ssl_session_cache    shared:SSL:1m;
        ssl_session_timeout  5m;

        ssl_ciphers  HIGH:!aNULL:!MD5;
        ssl_prefer_server_ciphers  on;

        location / {
                root   /app/web/demoPage;
                try_files $uri $uri/  /index.html;
                index  index.html index.htm;
        }
}

7.重启Nginx。

# 在校验配置文件的时候,报了一个错误。
# Nginx如果未开启SSL模块,配置Https时提示错误
# 因为Nginx缺少http_ssl_module模块,编译安装的时候带上–with-http_ssl_module配置就行了。
nginx: [emerg] the "ssl" parameter requires ngx_http_ssl_module in /usr/local/nginx/conf/nginx.conf:127
nginx: configuration file /usr/local/nginx/conf/nginx.conf test failed

# 但是现在nginx已经安装完成了,添加模块的步骤如下
# 查看当前安装Nginx的信息(configure arguments后面的信息为空,没有我们想要的模块)
$ /usr/local/nginx/sbin/nginx -v

nginx version: nginx/1.14.1
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-39) (GCC) 
configure arguments:

# 进入源码路径,重新打包
$ cd /usr/nginx/nginx-1.14.1
# 运行下面的命令即可,等配置完
$ ./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module
# 这里不要进行make install,否则就是覆盖安装
$ make
# 备份旧的文件(可以选择不备份)
$ cp /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.bak 
# 覆盖新的文件到执行路径(要把Nginx先停掉)
$ cp objs/nginx /usr/local/nginx/sbin/
# 覆盖完成后启动Nginx
$ usr/local/nginx/sbin/nginx

8.通过https域名访问网页(https配置成功后,访问域名前边会有一把小锁)

Nginx配置负载均衡

# 以https为例(http方式也可以),通过upstream的配置,实现转发,weight代表节点的权重
server {
        listen 443 ssl;
        server_name api.dishuizhiyi.top;

        ssl on;

        ssl_certificate /cert/top.pem;
        ssl_certificate_key /cert/top.key;

        ssl_session_cache shared:SSL:1m;
        ssl_session_timeout 5m;

        ssl_ciphers HIGH:!aNULL:!MD5;
        ssl_prefer_server_ciphers on;

        location / {
            proxy_pass http://api;
        }
    }

    upstream api{
         server 127.0.0.1:3000 weight=1;
         server 127.0.0.1:3001 weight=1;
         server 127.0.0.1:3002 weight=1;
    }