nginx之配置文件公用抽取

因为某些原因,需要同时部署同一应用两个不同分支的代码,而配置文件存在较大重复,因此有此篇。

最近构建的过程中遇到了一些跟nginx配置相关的问题,记录下。

简单说下构建的状况:前后端分离,jenkins + jar包+nginx部署前端。

#user  nobody;
worker_processes 1; #error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info; #pid logs/nginx.pid; events {
worker_connections 1024;
} http {
include mime.types;
default_type application/octet-stream; #log_format main '$upstream_addr $remote_addr - $remote_user [$time_local] "$request" '
#'$status $body_bytes_sent "$http_referer" '
#'"$http_user_agent" "$http_x_forwarded_for"'; #access_log logs/access.log main; sendfile on;
#tcp_nopush on; #keepalive_timeout 0;
keepalive_timeout 65; #gzip on; # 服务器有限,暂且部署到当前服务器上
upstream applicationName_server {
ip_hash;
server 127.0.0.1:8081;
server 127.0.0.1:8082;
} server {
listen 8888;
server_name localhost;
# 上传文件大小限制100M
client_max_body_size 100m; #charset koi8-r; #access_log logs/host.access.log main;
add_header BackendIP "$upstream_addr;" always; set $ROOT_HTML /opt/soft/applicationName/backend/ui/html; location ^~/applicationName/login {
proxy_pass http://applicationName_server;
add_header 'Cache-Control' 'no-cache';
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; }
location ^~/applicationName/logout {
proxy_pass http://applicationName_server;
add_header 'Cache-Control' 'no-cache';
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
} location /applicationName/api {
proxy_pass http://applicationName_server;
add_header 'Cache-Control' 'no-cache';
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
location ^~/applicationName/cas {
proxy_pass http://applicationName_server;
add_header 'Cache-Control' 'no-cache';
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
location /applicationName/artery {
proxy_pass http://applicationName_server;
add_header 'Cache-Control' 'no-cache';
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
} location /applicationName/artery/code {
proxy_pass http://applicationName_server/applicationName/code/;
add_header 'Cache-Control' 'no-cache';
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
} location ^~/static {
root $ROOT_HTML/applicationName;
} location / {
root $ROOT_HTML;
rewrite ^ /applicationName break;
}
location /applicationName {
if ($http_cookie = "") {
add_header Set-Cookie "thguid=$request_id;Path=/;Max-Age=315360000" always;
rewrite ^ /index.html break;
}
root $ROOT_HTML;
index index.html;
try_files $uri $uri/ /index.html; } location ~* ^.+\.(ico|js|gif|jpg|jpeg|png)$ {
root $ROOT_HTML;
try_files $uri $uri/ /index.html =404;
expires 1d;
} location ~* ^.+\.(eot|ttf|otf|woff|svg)$ {
root $ROOT_HTML;
try_files $uri $uri/ /index.html =404;
expires 7d;
} #error_page 404 /404.html; # redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
} } server {
listen 7777;
server_name localhost;
# 上传文件大小限制100M
client_max_body_size 100m; #charset koi8-r; #access_log logs/host.access.log main;
add_header BackendIP "$upstream_addr;" always; set $ROOT_HTML /opt/soft/applicationName/backend/ui/otherhtml; location ^~/applicationName/login {
proxy_pass http://127.0.0.1:8087;
add_header 'Cache-Control' 'no-cache';
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; }
location ^~/applicationName/logout {
proxy_pass http://127.0.0.1:8087;
add_header 'Cache-Control' 'no-cache';
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
} location /applicationName/api {
proxy_pass http://127.0.0.1:8087;
add_header 'Cache-Control' 'no-cache';
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
location ^~/applicationName/cas {
proxy_pass http://127.0.0.1:8087;
add_header 'Cache-Control' 'no-cache';
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
location /applicationName/artery {
proxy_pass http://127.0.0.1:8087;
add_header 'Cache-Control' 'no-cache';
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
} location /applicationName/artery/code {
proxy_pass http://127.0.0.1:8087/applicationName/code/;
add_header 'Cache-Control' 'no-cache';
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
} location ^~/static {
root $ROOT_HTML/applicationName;
} location / {
root $ROOT_HTML;
rewrite ^ /applicationName break;
}
location /applicationName {
if ($http_cookie = "") {
add_header Set-Cookie "thguid=$request_id;Path=/;Max-Age=315360000" always;
rewrite ^ /index.html break;
}
root $ROOT_HTML;
index index.html;
try_files $uri $uri/ /index.html; } location ~* ^.+\.(ico|js|gif|jpg|jpeg|png)$ {
root $ROOT_HTML;
try_files $uri $uri/ /index.html =404;
expires 1d;
} location ~* ^.+\.(eot|ttf|otf|woff|svg)$ {
root $ROOT_HTML;
try_files $uri $uri/ /index.html =404;
expires 7d;
} #error_page 404 /404.html; # redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
} } }

刚开始的时候只监听了8888端口(后端端口8081,8082),用来构建dev分支代码。后来,需要构建出一个新的分支,又不能影响dev分支。因此新增一个7777端口进行监听(后端对应端口8087),两个server除了端口不同外就只有proxy_pass对应的地址不同,html的地址不同,因此,考虑将相同部分抽出来。

在conf同级新建conf.d文件夹,新建dev.conf和performance.conf

server {
listen 8888;
server_name localhost;
# 上传文件大小限制100M
client_max_body_size 100m; #charset koi8-r; #access_log logs/host.access.log main;
add_header BackendIP "$upstream_addr;" always; set $ROOT_HTML /opt/soft/applicationName/backend/ui/html;
set $SERVER_URL applicationName_server;
include common-route.conf; }
server {
listen 7777;
server_name localhost;
# 上传文件大小限制100M
client_max_body_size 100m; #charset koi8-r; #access_log logs/host.access.log main;
add_header BackendIP "$upstream_addr;" always; set $ROOT_HTML /opt/soft/applicationName/backend/ui/otherhtml;
set $SERVER_URL 127.0.0.1:8087;
include common-route.conf; }

这里将原本两个不同点通过设置ROOT_HTMLSERVER_URL来解决。其余的内容放到conf文件夹下的common-router.conf

# 通用路由
location ^~/applicationName/login {
proxy_pass http://$SERVER_URL;
add_header 'Cache-Control' 'no-cache';
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; }
location ^~/applicationName/logout {
proxy_pass http://$SERVER_URL;
add_header 'Cache-Control' 'no-cache';
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
} location /applicationName/api {
proxy_pass http://$SERVER_URL;
add_header 'Cache-Control' 'no-cache';
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
location ^~/applicationName/cas {
proxy_pass http://$SERVER_URL;
add_header 'Cache-Control' 'no-cache';
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
location /applicationName/artery {
proxy_pass http://$SERVER_URL;
add_header 'Cache-Control' 'no-cache';
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
} location /applicationName/artery/code {
#return 200 http://$SERVER_URL/applicationName/code;
rewrite ^/(.*)/code/(.*)$ /applicationName/code/$2 permanent;
#proxy_pass $CODE_URL;
#proxy_pass http://$SERVER_URL/applicationName/code/;
#proxy_pass http://127.0.0.1:8087/applicationName/code/;
add_header 'Cache-Control' 'no-cache';
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
location /applicationName/code {
proxy_pass http://$SERVER_URL;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
} location ^~/static {
root $ROOT_HTML/applicationName;
} location / {
root $ROOT_HTML;
rewrite ^ /applicationName break;
}
location /applicationName {
if ($http_cookie = "") {
add_header Set-Cookie "thguid=$request_id;Path=/;Max-Age=315360000" always;
rewrite ^ /index.html break;
}
root $ROOT_HTML;
index index.html;
try_files $uri $uri/ /index.html; } location ~* ^.+\.(ico|js|gif|jpg|jpeg|png)$ {
root $ROOT_HTML;
try_files $uri $uri/ /index.html =404;
expires 1d;
} location ~* ^.+\.(eot|ttf|otf|woff|svg)$ {
root $ROOT_HTML;
try_files $uri $uri/ /index.html =404;
expires 7d;
} #error_page 404 /404.html; # redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}

nginx.conf如下

#user  nobody;
worker_processes 1; #error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info; #pid logs/nginx.pid; events {
worker_connections 1024;
} http {
include mime.types;
default_type application/octet-stream; #log_format main '$upstream_addr $remote_addr - $remote_user [$time_local] "$request" '
#'$status $body_bytes_sent "$http_referer" '
#'"$http_user_agent" "$http_x_forwarded_for"'; #access_log logs/access.log main; sendfile on;
#tcp_nopush on; #keepalive_timeout 0;
keepalive_timeout 65; #gzip on; # 服务器有限,暂且部署到当前服务器上
upstream applicationName_server {
ip_hash;
server 127.0.0.1:8081;
server 127.0.0.1:8082;
} include /usr/local/nginx/conf.d/*.conf; }

虽然上面的配置平平无奇,不过走向正确配置的道路还是遇到了些波折。

  • conf.d文件夹下的两个conf文件的include文件的路径问题,..啥的用不了,反倒是看起来不正确的 include common-route.conf;能够正确引用。另一点是,common-route.conf不能放到conf.d下面,报的错忘了什么了。

  • 原先conf.dconf文件的SERVER_URL是这样的http://applicationName_server,后来报了invalid port,把http://去掉放到具体的server里面了。

  • 单值代码加载,在未做改造前这样

    location /applicationName/artery/code {
    proxy_pass http://applicationName_server/applicationName/code/;
    add_header 'Cache-Control' 'no-cache';
    proxy_set_header Host $http_host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }

    第一次改造

    location /applicationName/artery/code {
    
    	proxy_pass http://$SERVER_URL/applicationName/code/;
    
        add_header 'Cache-Control' 'no-cache';
    proxy_set_header Host $http_host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }

    这种直接404,而如果把$SERVER_URL改成具体的后端地址,则7777和8888端口中有一个可以正常访问单值代码。谷歌的几个方案都说是什么resolver的问题,但照着改还是不工作

    再后来改造使用rewrite来改写path

       location /applicationName/artery/code {
    
                    rewrite  ^/(.*)/code/(.*)$ /applicationName/code/$2  permanent;
    
                       add_header 'Cache-Control' 'no-cache';
    proxy_set_header Host $http_host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }

    路径倒是改了(忽略上面的$2,去掉第一个括号可以改成$1),可applicationName/code又404了。然后又加上了/applicationName/code的location配置

    location /applicationName/artery/code {
    #return 200 http://$SERVER_URL/applicationName/code;
    rewrite ^/(.*)/code/(.*)$ /applicationName/code/$2 permanent;
    #proxy_pass $CODE_URL;
    #proxy_pass http://$SERVER_URL/applicationName/code/;
    #proxy_pass http://127.0.0.1:8087/applicationName/code/;
    add_header 'Cache-Control' 'no-cache';
    proxy_set_header Host $http_host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
    location /applicationName/code {
    proxy_pass http://$SERVER_URL;
    proxy_set_header Host $http_host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }

最后,附个conf的目录结构

nginx之配置文件公用抽取的更多相关文章

  1. Nginx的配置文件(nginx.conf)解析和领读官网

    步骤一:vi nginx.conf配置文件,参考本博文的最下面总结,自行去设置 最后nginx.conf内容为 步骤二:每次修改了nginx.conf配置文件后,都要reload下. index.ht ...

  2. [原]生产环境下的nginx.conf配置文件(多虚拟主机)

    [原]生产环境下的nginx.conf配置文件(多虚拟主机) 2013-12-27阅读110 评论0 我的生产环境下的nginx.conf配置文件,做了虚拟主机设置的,大家可以根据需求更改,下载即可在 ...

  3. Nginx源码研究六:NGINX的配置文件分析

    上一篇写到nginx的各个模块的配置信息的存储结构,大体描述了对配置信息的配置项生成,定制,初始化过程.这里重点研究实现定制的过程,所谓实现定制,这里指的是,nginx系统提供使用者定义nginx的配 ...

  4. Nginx 主配置文件参数详解

    Nginx 主配置文件参数详解 Nginx 安装完毕后,会有响应的安装目录,安装目录里 nginx.conf 为 nginx 的主配置文件, ginx 主配置文件分为 4 部分,main(全局配置). ...

  5. Nginx的配置文件nginx.conf解析

    安装openresty的nginx.conf配置文件 0.ng运行的用户和用户组 1.ng进程数,设置为CPU总核心数 2.ng错误日志 3.进程文件,有时ng启动不了,将进程文件删除即可. 4.单进 ...

  6. Nginx入门讲解——初步认识了解nginx.conf配置文件以及配置多个虚拟主机

    本文引自网络进攻学习之用https://blog.csdn.net/weixin_38111957/article/details/81080539 一. 引言上节文章讲述了如何用信号控制Nginx服 ...

  7. Nginx(二)------nginx.conf 配置文件

    上一篇博客我们将 nginx 安装在 /usr/local/nginx 目录下,其默认的配置文件都放在这个目录的 conf 目录下,而主配置文件 nginx.conf 也在其中,后续对 nginx 的 ...

  8. 通过python生成nginx模板配置文件

    通过python生成nginx模板配置文件 # cat config.py #coding=utf-8 nginx_conf = ''' server {{ listen {port}; server ...

  9. 第四百零二节,Django+Xadmin打造上线标准的在线教育平台—生产环境部署,uwsgi安装和启动,nginx的安装与启动,uwsgi与nginx的配置文件+虚拟主机配置

    第四百零二节,Django+Xadmin打造上线标准的在线教育平台—生产环境部署,uwsgi安装和启动,nginx的安装与启动,uwsgi与nginx的配置文件+虚拟主机配置 软件版本  uwsgi- ...

随机推荐

  1. laravel8安装步骤

    网址: https://learnku.com/docs/laravel/8.x/installation/9354 安装: # 安装laravel composer create-project - ...

  2. pd.cut和pd.qcut()之间的区别

  3. CF594D题解

    我不会数据结构/kk 我想题意应该十分清楚了. 我们知道 \(\varphi(p^k)=p^{k-1}(p-1)\),那么我们考虑将一个询问下放到右端点,然后往右移动右端点并更新每个左端点到右端点的答 ...

  4. 空间插值生物X适宜性分析

    1 前言 这期博主将根据示例大概讲一下插值分析. 2 问题阐述 根据要求,完成以下操作: (1)请就以上条件确定此地区适合X的生活范围,并制作专题图.专题图内容要求以地形和水系作为背景,且给出适宜区域 ...

  5. Haproxy之负载均衡功能、基于cookie的session持久、haproxy自带的健康页面及其动静分离的实现

    实验前提: 1.本次实验是在Centos 7.4(64bit)系统上完成的.2.实验前确保每台服务器时间同步3.本次实验有3台主机,其中haproxy作为反向代理地址为192.168.31.43,后面 ...

  6. OpenCores注册步骤和成功提交

    一  OpenCores 网站简介,这个是全世界最大的FPGA开源IP核网站.由于最近在学习USB2.0host control IP,所以想去网上下载相关的IP例程学习.通过搜索发现,有两个网站十分 ...

  7. 二叉树:前序遍历、中序遍历、后序遍历,BFS,DFS

    1.定义 一棵二叉树由根结点.左子树和右子树三部分组成,若规定 D.L.R 分别代表遍历根结点.遍历左子树.遍历右子树,则二叉树的遍历方式有 6 种:DLR.DRL.LDR.LRD.RDL.RLD.由 ...

  8. Redis集群节点扩容及其 Redis 哈希槽

    Redis 集群中内置了 16384 个哈希槽,当需要在 Redis 集群中放置一个 key-value 时,redis 先对 key 使用 crc16 算法算出一个结果,然后把结果对 16384 求 ...

  9. 如何实现 Spring Boot 应用程序的安全性?

    为了实现 Spring Boot 的安全性,我们使用 spring-boot-starter-security 依赖项,并且必须添加安全配置.它只需要很少的代码.配置类将必须扩展WebSecurity ...

  10. Java并发机制(2)--synchronized与Lock

    本内容整理自:博客园-海 子-java并发编程系列-http://www.cnblogs.com/dolphin0520/category/602384.html 1.基础: 1.什么时候出现线程安全 ...