反向代理,免除端口输入 🤔需求描述:

  1. 已有域名blog.betteryimi.top
  2. 有公网ip的服务器
  3. 在服务器的6015端口跑了一个静态web服务
  4. 使用blog.betteryimi.top不带端口去访问6015的web服务

✨步骤:

  1. 安装Nginx(如果还没有安装):

    sudo apt update 
    sudo apt install nginx
  2. 配置Nginx以服务静态文件: 首先,创建一个新的Nginx配置文件。

    sudo nano /etc/nginx/sites-available/blog.betteryimi.com

    在文件中添加以下内容:

    server {
        listen 80;
        server_name blog.betteryimi.com;
     
        location / {
            proxy_pass http://localhost:6015;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
        }
    }
  3. 创建一个符号链接到sites-enabled目录

    sudo ln -s /etc/nginx/sites-available/blog.betteryimi.com /etc/nginx/sites-enabled/

  4. 配置静态文件服务: 创建一个新的Nginx配置文件来服务静态文件:

    sudo nano /etc/nginx/sites-available/static_files

    在文件中添加以下内容:

    server {
        listen 6015;
        server_name localhost;
     
        location / {
            root /path/to/your/public;
            index index.html;
            # 免除.html后缀
            try_files $uri $uri.html $uri/ =404;
        }
     
        # 指定自定义404错误页面
        error_page 404 /404.html;
        location = /404.html {
            root /path/to/your/public;
            internal;
        }
    }
     

    请将/path/to/your/public替换为你实际的静态文件目录路径。

  5. 创建一个符号链接到sites-enabled目录sudo ln -s /etc/nginx/sites-available/static_files /etc/nginx/sites-enabled/

  6. 测试Nginx配置

    sudo nginx -t

    如果配置文件没有错误,你会看到类似以下的输出:

    nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful

  7. 重新加载Nginxsudo systemctl reload nginx

✨为https添加证书,证书可以使用阿里云的个人免费证书,生成后部署,然后443端口开启web服务,配置如下: https_blog_betteryimi_top

server {
	#HTTPS的默认访问端口443。
	#如果未在此处配置HTTPS的默认访问端口,可能会造成Nginx无法启动。
	listen 443 ssl;
	
	#填写证书绑定的域名
	server_name <yourdomain>;
	
	#填写证书文件绝对路径
	ssl_certificate cert/<cert-file-name>.pem;
	#填写证书私钥文件绝对路径
	ssl_certificate_key cert/<cert-file-name>.key;
	
	ssl_session_cache shared:SSL:1m;
	ssl_session_timeout 5m;
	
	#自定义设置使用的TLS协议的类型以及加密套件(以下为配置示例,请您自行评估是否需要配置)
	#TLS协议版本越高,HTTPS通信的安全性越高,但是相较于低版本TLS协议,高版本TLS协议对浏览器的兼容性较差。
	ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
	ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;
	
	#表示优先使用服务端加密套件。默认开启
	ssl_prefer_server_ciphers on;
 
 
	location / {
		proxy_pass http://localhost:6015;
		proxy_set_header Host $host;
		proxy_set_header X-Real-IP $remote_addr;
		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
		proxy_set_header X-Forwarded-Proto $scheme;
	}
}

✨http跳转https

server {
    listen 80;
    #填写证书绑定的域名
    server_name blog.betteryimi.top;
 
    #将所有HTTP请求通过rewrite指令重定向到HTTPS。
    rewrite ^(.*)$ https://$host$1;
    # 这个不写好像也行如果只需要配置一个https的转发?
#    location / {
#        index index.html index.htm;
#    }
 
#	location / {
#		proxy_pass https://localhost:6015;
#		proxy_set_header Host $host;
#		proxy_set_header X-Real-IP $remote_addr;
#		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
#		proxy_set_header X-Forwarded-Proto $scheme;
#	}
}