引言

恩……这篇文章的起因嘛,主要还是贫穷。

唉,哪有后端不想一个项目一台服务器的呢?无奈之举而已

实现方法

1. 有Nginx服务器

这里指的有,是两个方面:

  1. 拥有一台服务器(线上线下均可,线下的话,可能需要内网穿透或转发)
  2. 服务器上拥有Nginx服务

如果没有服务器的话,可以在各大云厂商处购买,购买方法如下:

参考另一篇文章:购买阿里云ECS服务器

https://hw13.cn/15.html

没有安装Nginx服务的话,可以使用yum安装或源码安装,源码安装教程如下:

参考另一篇文章:源码搭建Nginx服务器

https://hw13.cn/66.html

2. 找到Nginx配置文件

连接上远程服务器。

首先找到你安装的位置,比如我,按照上面教程安装的话

你的配置目录就在你安装目录下的conf文件夹。

conf配置目录

可以看到,里头有个nginx.conf文件,这个文件就是我们Nginx的主配置文件了。

vim命令打开它!

然后可以看到这里有很多的行,内容很多,不要紧,我们接下来捋一捋。

主配置文件

3. 捋一捋文件结构

这里第一行是user,代表Nginx服务器访问资源时用的用户信息和用户组,通常写法是:user 你的Nginx用户名 你的Nginx用户组名

后面有worker_processes,代表工作进程数,服务不大的情况,写1就行。

后面有events模块和http模块。

这部分我们主要关注http模块,我们看到标准的配置文件给了个默认的配置。

http {
    include       mime.types;
    default_type  application/octet-stream;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip  on;


    server {
        listen       80;
        server_name  localhost;

        location / {
            # root   html;
            root 默认项目目录;
            index  index.html index.htm;
        }

        location = /50x.html {
            root   html;
        }
    }
}

主要关注server段,每个server段,都代表监听了一个端口和主机名。

比如默认的这种,就是监听访问本机80端口的请求,将这些请求转发到你的默认项目目录下。

那我们就可以开始仿照这种方式来写了。

4. 修改配置文件,支持引用多站点域名配置

但由于一个一个站点域名部署起来会多次修改,这里最好不要直接写在Nginx的主配置文件nginx.conf文件里。

这里我们用到一个新的知识点,include方法,来将本来需要写在一个配置文件里的内容拆分到几个文件里,然后include引用进来。

我们在server模块的后面,加入我们的include子句。

# more website
include vhost/*.conf;

这里是在引用vhost/文件夹下面,所有文件后缀是.conf的文件内容,引用到当前位置。

注意:你插入include子句的位置一定要是在server模块后面,别弄错了

我这里为了防止你弄错,再放一遍结构:

http {
    include       mime.types;
    default_type  application/octet-stream;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip  on;


    server {
        listen       80;
        server_name  localhost;

        location / {
            # root   html;
            root 你的默认项目目录;
            index  index.html index.htm;
        }

        location = /50x.html {
            root   html;
        }

    }

    # more website
    include vhost/*.conf;
}

5. 创建站点配置存放的文件夹

刚刚上面我提到了一个vhost文件夹,但实际上这个文件夹是不存在的。

我们需要用命令创建它,注意,位置不要搞错了,这个vhost文件夹是跟nginx.conf文件同级的,都是在conf文件夹下的。

mkdir vhost

然后,我们进到这个目录下,准备创建配置文件。

6. 创建站点域名文件

这里我写的是基础范例。

如果需要在一台服务器上挂着多个站点,就需要创建多个配置文件。

在这个nginx安装目录/conf/vhost/下,我们使用vim命令进行编辑一个新文件。

注意:这里的文件名没有限制,但后缀一定要是.conf,除非你上面没有按照我的说法来

建议文件名用站点的域名来。

vim hw13.cn.conf

我这里的文件名用的是我的域名,你自行更换哈。

https强制跳转方案
# 网站 http 访问
server{
    listen 80;
    server_name 你的域名;

    rewrite ^(.*)$  https://$host$1 permanent;
}

# 网站 https 访问
server {
    listen    443 ssl;
    server_name 你的域名;
    root 你的项目根目录;
    index index.html index.htm index.php;
    ssl_certificate cert/你的域名.pem;
    ssl_certificate_key cert/你的域名.key;
    ssl_session_timeout 5m;
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4; #使用此加密套件。
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #使用该协议进行配置。
    ssl_prefer_server_ciphers on;

    # 苹果要求的,需要可访问这个文件,如无需求可省略
    location ~ /apple-app-site-association {
        default_type application/json;
        alias 你的项目根目录/apple-app-site-association;
    }

    # 所有请求全部重定向到index.php
    location / {
        if (-f $request_filename/index.html){
            rewrite (.*) $1/index.html break;
        }
        if (-f $request_filename/index.php){
            rewrite (.*) $1/index.php;
        }
        if (!-f $request_filename){
            rewrite (.*) /index.php;
        }
    }

    location ~ \.php$ {
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME 你的项目根目录$fastcgi_script_name;
        include        fastcgi_params;
    }
}

我这里是一台部署了php的服务器,如果你是Java的服务器,可以用别的代理端口和解析服务。

另外,这里部署了https的配置,如果遇到有http的访问,会直接产生一个301重定向转发到https的站点。

https进行解析处理。

http解析使用方案

配置文件如下:

# 网站 http 访问
server{
    listen 80;
    server_name 你的域名;
    root 你的项目根目录;
    index index.html index.htm index.php;

    # 苹果要求的,需要可访问这个文件,如无需求可省略
    location ~ /apple-app-site-association {
        default_type application/json;
        alias 你的项目根目录/apple-app-site-association;
    }

    # 所有请求全部重定向到index.php
    location / {
        if (-f $request_filename/index.html){
            rewrite (.*) $1/index.html break;
        }
        if (-f $request_filename/index.php){
            rewrite (.*) $1/index.php;
        }
        if (!-f $request_filename){
            rewrite (.*) /index.php;
        }
    }

    location ~ \.php$ {
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME 你的项目根目录$fastcgi_script_name;
        include        fastcgi_params;
    }
}

欢迎关注拓行公众号,分享各种技术博客文章

拓行——奋勇进取,开拓未来,砥砺前行

最后修改:2023 年 12 月 28 日
如果您对各种技术博客文章感兴趣,欢迎关注拓行公众号,分享各种专业技术知识~