Skip to content

目录

一、准备工作

二、部署项目

三、修改nginx的配置文件

一、准备工作

1、首先你要有一台服务器,本篇文章是创建在腾讯云服务器的基础上的,仅供参考

2、在服务器上注册域名,这个域名注册等待审核时间较长,建议提早注册,在服务器的控制台搜索域名注册即可

img

 3、在服务器上申请SSL证书,这个证书可以免费申请

img

 4、证书申请成功之后,选择证书后边的下载,下载nginx版本的证书,先保存到本地,之后会上传到服务器上

img

5、解析域名

img

使用云解析即可

点击添加记录,他会有提示,一般选择解析主域名,选择@即可,如果你想使用其他的域名,那么就选择其他的解析方式

img

 

5、在你的服务器上安装tomcat,设置端口号为8080

6、安装nginx,端口号为80,运用yum指令安装即可

二、部署项目

找到你tomcat安装的位置,选择里面的webapp目录,然后rz上传即可,再重启tomcat,他会自己解压war包

三、修改nginx的配置文件

1、首先去到nginx的配置文件目录,然后编辑nginx的配置文件nginx.conf

bash
cd /usr/local/nginx/conf
vim nginx.conf

2、进入后,开始配置https所需的内容,这里配置文件要求十分严格,少了什么都不行,其他版本可能不会有这个问题,如果遇到这个问题,那么你可以严格的按着本文的来写

这里只展示443的配置代码:

bash
server {
        #SSL 访问端口号为 443
        listen 443 ssl;
        #填写绑定证书的域名
        server_name "证书上你的域名"; #实际填写的时候不要加引号!!!
        #证书文件名称
        ssl_certificate "sslfile/你的域名_bundle.crt";
        #私钥文件名称
        ssl_certificate_key "sslfile/你的域名.key";
        ssl_session_timeout 5m;
        #请按照以下协议配置
        ssl_protocols TLSv1.2 TLSv1.3;
        #请按照以下套件配置,配置加密套件,写法遵循 openssl 标准。
        ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
        ssl_prefer_server_ciphers on;
        location / {
           #网站主页路径:此路径仅供参考,具体请您按照实际目录操作。
           #例如,您的网站运行目录在/etc/www下,则填写/etc/www。
           #root /etc/www;
           proxy_pass  "http://服务器ip地址(有域名就写域名)"; 

        }
}

我的配置:

第一套方案:nginx自己的项目配置https(443中用proxy_pass) ——> 只是为了测试而已,这样不好

注1:这里的方案是无法实现http强制跳转为htpps的,因为这两个都是要访问的nginx上面的项目,那么跳来跳去只是http和https在互相跳转,形成了重定向的死循环,会把浏览器搞崩溃!!!

注2:如果重定向过多导致浏览器始终拒绝访问某个网站,那么可以清除缓存,清除cookie即可重新访问!

bash
# HTTP 配置
server {
        listen  80;
        server_name  fishbones.com.cn; #或者localhost
        # rewrite ^(.*)$ https://${server_name}$1 permanent; #不能写这个!!
        location / {
            root   html;
            index  index.html index.htm;
        }
}

# HTTPS 配置
server {
	listen 443 ssl;
	server_name fishbones.com.cn;
	ssl_certificate sslfile/fishbones.com.cn_bundle.crt;
	ssl_certificate_key sslfile/fishbones.com.cn.key;
	ssl_session_timeout 5m;
	ssl_protocols TLSv1.2 TLSv1.3;
	ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
	ssl_prefer_server_ciphers on;
	location / {
		proxy_pass  http://fishbones.com.cn; 
	}
}

第二套方案:nginx自己的项目配置https(443中用root/alias)——> 一般是部署前端vue项目时这样配置,非常完美的方式!

bash
# HTTP 配置
server {
        listen  80;
        server_name  fishbones.com.cn;
        rewrite ^(.*)$ https://${server_name}$1 permanent; #强制跳转为https
        #或者:return 301 https://$server_name$request_uri;
        #下面其实应该有没有都行,因为不会走到这里,上面直接重定向了!
        location / {
            root   html;
            index  index.html index.htm;
        }
}

# HTTPS 配置
server {
	listen 443 ssl;
	server_name fishbones.com.cn;
	ssl_certificate sslfile/fishbones.com.cn_bundle.crt;
	ssl_certificate_key sslfile/fishbones.com.cn.key;
	ssl_session_timeout 5m;
	ssl_protocols TLSv1.2 TLSv1.3;
	ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
	ssl_prefer_server_ciphers on;
    location / {
    	# root  html/dist; #访问https://fishbones.com.cn/test,实际上是访问目录的html/dist/test/index.html文件!
    	root  html;
    }
}

第三套方案:nginx代理其他端口的项目配置https(以tomcat为例)——> 一般是要把后台当做服务器,才会这么配置!

bash
# HTTP 配置
server {
        listen  80;
        server_name  fishbones.com.cn;
        rewrite ^(.*)$ https://${server_name}$1 permanent; #强制跳转为https
        #或者:return 301 https://$server_name$request_uri;
        #下面其实应该有没有都行,因为不会走到这里,上面直接重定向了!
        location / {
            proxy_pass http://fishbones.com.cn:8080/;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
            proxy_set_header X-Forwarded-Port $server_port; 
        }
}

# HTTPS 配置
server {
	listen 443 ssl;
	server_name fishbones.com.cn;
	ssl_certificate sslfile/fishbones.com.cn_bundle.crt;
	ssl_certificate_key sslfile/fishbones.com.cn.key;
	ssl_session_timeout 5m;
	ssl_protocols TLSv1.2 TLSv1.3;
	ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
	ssl_prefer_server_ciphers on;
	location / {
		# 注意:这样可以跳转到tomcat,但是就看不到nginx下的网页了!
		proxy_pass  http://fishbones.com.cn:8080/; #
		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
         proxy_set_header X-Forwarded-Proto $scheme;
         proxy_set_header X-Forwarded-Port $server_port;
	}
}

检查配置文件书写是否正确:

bash
nginx -t

3、可以看到上边的代码中,有.crt文件和.key文件,这就是你在第一中的4步中下载的证书中的内容,需

要你在nginx的目录内,创建一个sslfile文件夹,当然这个文件夹的名字可以随便取,只要对应就可以,

在这个文件夹内rz上传对应的.crt文件和.key文件。

java
cd /usr/local/nginx/conf  //进入到nginx配置文件目录下
mkdir sslfile  //创建名为sslfile的文件夹
cd sslfile    //进入文件夹
rz        //上传文件:.crt文件和.key文件

4、配置完成后重启nginx,下面是关于nginx的相关指令

java
systemctl status nginx  //查看nginx的运行状态
 
systemctl start nginx   // 启动nginx
 
systemctl stop nginx    // 关闭nginx
 
systemctl restart nginx     //重启nginx

5、在浏览器输入https://你的域名 如果出现你的网站未备案,或者出现welcome to nginx,那么就说明你的域名的https已经搭建完成,未备案的进行备案,其他的问题请查看nginx的运行日志。

访问成功:

image-20221011000518125

注1:配置http强制转换https访问

在nginx.conf文件中配置,在http配置中添加return 301 https://$server_name$request_uri; (重定向)

然后保存

image-20221010175103113

注2:可能出现的问题:没有开启ssl模块

可能出现的报错情况:

nginx: [emerg] unknown directive "ssl_certificate1" in /usr/local/nginx/conf/ngi...

nginx: [emerg] the "ssl" parameter requires ngx_http_ssl_module in ......

解决方案:

首先,我们查看自己的Nginx是否开启了ssl模块,命令如下(注意这里是大写的V,如果是小写的v只会显示nginx的version):

bash
nginx -V

如果显示如下信息表示SSL功能已经开启,否则就是没安装:

image-20221011001012281

安装ssl模块:

编译Nginx的时候添加ssl参数安装,上一期我们在编译的时候只执行了:

bash
./configure

这个不带任何参数的安装时最小安装,这里是不带SSL的,如果需要开启ssl功能则还需要添加参数:

bash
./configure --with-http_ssl_module

然后再执行一下命令即可:

bash
# make && make install
# 注:我们应当关闭nginx,然后执行make install,否则可能会失败!
make install

再检查一下安装是否成功:

bash
nginx -V