Nginx 配置文件nginx.conf拆分

文章目录

本文环境:ubuntu 18.04 阿里云 当nginx 反向代理的内容越来越多的时候,如果仅仅使用nginx.conf来配置会导致比较难管理。所以希望按照子域名规则来划分application。然后将application的规则配置到/etc/nginx/conf.d/下面去。 目前希望针对不同子域名进行拆分。比如有以下两个子域名的反向代理需要拆分。 rtc.sample.top -> port 4056 account.sample.top -> port 4057

1 环境准备

本节主要准备两个测试HTTP服务器,并配置nginx反向代理,通过方向代理访问测试HTTP服务器,完成一个简单nginx反向代理配置的演示。后续会在此基础上进行配置拆分。

1.1 安装nginx

sudo apt install ubuntu
1
安装完成后相应配置
/etc/nginx/nginx.conf
# nginx主配置文件
/etc/nginx/conf.d/*
# nginx需要配置的app目录
1234

1.2 架设测试Http服务器

使用Http 编写两个测试Http 服务器 前台运行在不同端口(4056,4057).
const http = require('http');
  
const server = http.createServer((req, res) => {
        res.end('hello client.this is 4056 port\n');
});
server.on('clientError', (err, socket) => {
          socket.end('HTTP/1.1 400 Bad Request\r\n\r\n');
});
server.listen(4056);
123456789
运行
node httpServer.js 
1

1.3 更改nginx配置实现反向代理到后端测试http服务器

1.3.1 配置nginx config

sudo vi /etc/nginx/nginx.conf 
1
在http块中 server块后新增两条server规则
    server {
        listen       80;
        server_name  rtc.sample.top;
        ssl off;

         location ~ .*?\.(js|css|jpg|png|jpeg|less|sass)
         {
                root /root/server/public;
         }
         location / {
            proxy_pass http://localhost:4056;
         }
	}
	
	server {
        listen       80;
        server_name  account.sample.top;
        ssl off;

         location ~ .*?\.(js|css|jpg|png|jpeg|less|sass)
         {
                root /root/server/public;
         }
         location / {
            proxy_pass http://localhost:4057;
         }
	}
这两条规则即为 将rtc.sample.top 反向代理到 http://localhost:4056, 将account.sample.top 反向代理到 http://localhost:4057; 重新加载nginx配置
sudo nginx -s reload
1

1.3.2 配置域名解析

在阿里云后台域名解析那里配置域名解析 然后解析rtc.sample.top 及account.sample.top 两个域名到云主机ip。这里就完成基础的反向代理nginx 配置操作。

1.3.3 测试

浏览器中访问 http://account.sample.top/ 既可以看到返回值: hello client.this is 4057 port 浏览器中访问 http://rtc.sample.top/ 既可以看到返回值 hello client.this is 4056 port

2 配置拆分

如果仅仅是两个Server配置看起来还好,但如果Server块中配置变得复杂,且Server块越来越多,我们就应该把每一个application拆分到单独配置中。这样更好管理 修改/etc/nginx/nginx.conf 配置,加载/etc/nginx/conf.d/* 下的application配置文件。在http块中原server块位置添加以下语句
include /etc/nginx/conf.d/*.conf; #加载/etc/nginx/conf.d/路径下所有后缀名为conf的文件,也可以自定义指向其他位置
1
也就是配置成大概这样**, 实际上nginx 安装后 会默认携带此语句 所有并不用自己添加。**
user www-data;
worker_processes auto;
pid /run/nginx.pid;
include /etc/nginx/modules-enabled/*.conf;

events {
        worker_connections 768;
}

http {
        sendfile on;
        tcp_nopush on;
        tcp_nodelay on;
        keepalive_timeout 65;
        types_hash_max_size 2048;
        include /etc/nginx/mime.types;
        default_type application/octet-stream;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # Dropping SSLv3, ref: POODLE
        ssl_prefer_server_ciphers on;
        access_log /var/log/nginx/access.log;
        error_log /var/log/nginx/error.log;
        gzip on;

        include /etc/nginx/conf.d/*.conf;
        include /etc/nginx/sites-enabled/*;
}
在/etc/nginx/conf.d/下添加自己的配置文件。比如添加上诉两个规则 rtc.sample.top 反向代理到 http://localhost:4056 将account.sample.top 反向代理到 http://localhost:4057; 则可以在/etc/nginx/conf.d/ 编写一个 rtc.sample.top.conf 文件,内容如下
server {
    listen       80;
    server_name  rtc.sample.top;
    ssl off;

     location ~ .*?\.(js|css|jpg|png|jpeg|less|sass)
     {
            root /root/server/public;
     }
     location / {
        proxy_pass http://localhost:4056;
     }
}
同理 编写account.sample.top.conf文件 清理对应/etc/nginx/nginx.conf中的原Server块内容,然后执行nginx -s reload重新加载配置。测试,效果保持一致。 浏览器中访问 http://account.sample.top/ 既可以看到返回值: hello client.this is 4057 port 浏览器中访问 http://rtc.sample.top/ 既可以看到返回值 hello client.this is 4056 port 拆分成功。这样我们两个application 的代理配置文件就从nginx.conf 中配置到了/etc/nginx/conf.d/下了

原创文章,作者:Zhang Miao Miao,如若转载,请注明出处:https://www.yidc.net/archives/11479