nginx之配置文件公用抽取
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_HTML
和SERVER_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.d
conf文件的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之配置文件公用抽取的更多相关文章
- Nginx的配置文件(nginx.conf)解析和领读官网
步骤一:vi nginx.conf配置文件,参考本博文的最下面总结,自行去设置 最后nginx.conf内容为 步骤二:每次修改了nginx.conf配置文件后,都要reload下. index.ht ...
- [原]生产环境下的nginx.conf配置文件(多虚拟主机)
[原]生产环境下的nginx.conf配置文件(多虚拟主机) 2013-12-27阅读110 评论0 我的生产环境下的nginx.conf配置文件,做了虚拟主机设置的,大家可以根据需求更改,下载即可在 ...
- Nginx源码研究六:NGINX的配置文件分析
上一篇写到nginx的各个模块的配置信息的存储结构,大体描述了对配置信息的配置项生成,定制,初始化过程.这里重点研究实现定制的过程,所谓实现定制,这里指的是,nginx系统提供使用者定义nginx的配 ...
- Nginx 主配置文件参数详解
Nginx 主配置文件参数详解 Nginx 安装完毕后,会有响应的安装目录,安装目录里 nginx.conf 为 nginx 的主配置文件, ginx 主配置文件分为 4 部分,main(全局配置). ...
- Nginx的配置文件nginx.conf解析
安装openresty的nginx.conf配置文件 0.ng运行的用户和用户组 1.ng进程数,设置为CPU总核心数 2.ng错误日志 3.进程文件,有时ng启动不了,将进程文件删除即可. 4.单进 ...
- Nginx入门讲解——初步认识了解nginx.conf配置文件以及配置多个虚拟主机
本文引自网络进攻学习之用https://blog.csdn.net/weixin_38111957/article/details/81080539 一. 引言上节文章讲述了如何用信号控制Nginx服 ...
- Nginx(二)------nginx.conf 配置文件
上一篇博客我们将 nginx 安装在 /usr/local/nginx 目录下,其默认的配置文件都放在这个目录的 conf 目录下,而主配置文件 nginx.conf 也在其中,后续对 nginx 的 ...
- 通过python生成nginx模板配置文件
通过python生成nginx模板配置文件 # cat config.py #coding=utf-8 nginx_conf = ''' server {{ listen {port}; server ...
- 第四百零二节,Django+Xadmin打造上线标准的在线教育平台—生产环境部署,uwsgi安装和启动,nginx的安装与启动,uwsgi与nginx的配置文件+虚拟主机配置
第四百零二节,Django+Xadmin打造上线标准的在线教育平台—生产环境部署,uwsgi安装和启动,nginx的安装与启动,uwsgi与nginx的配置文件+虚拟主机配置 软件版本 uwsgi- ...
随机推荐
- 微服务入门三:SpringCloud Alibaba
一.什么是SpringCloud Alibaba 1.简介 1)简介 阿里云未分布式应用开发提供了一站式解决方案.它包含了开发分布式应用程序所需的所有组件,使您可以轻松地使用springcloud开发 ...
- C#-使用HttpListener创建http服务
参考: c# 通过HttpListener创建HTTP服务 运行服务端程序,启动监听器httpobj.Start();时报错:System.Net.HttpListenerException: 'Ac ...
- [csi]浅聊ceph-csi组件
描述 ceph-csi扩展各种存储类型的卷的管理能力,实现第三方存储ceph的各种操作能力与k8s存储系统的结合.调用第三方存储ceph的接口或命令,从而提供ceph数据卷的创建/删除.挂载/解除 ...
- Jmeter-根据负载计算并发用户实际案例
业务场景 假设公司领导现在给你分配了一个性能测试需求如下: 1:公司有1000人在上班时间段会登录平台进行打卡操作,可能会登录打卡多次2:业务高峰时间段在8:00-8:30,半小时3:需要保证90%用 ...
- windows2008R2重建索引
windows索引服务 索引服务是一项系统服务(Indexing Service),使用文档筛选器读取整个文档,并提取文档和属性传递给索引程序,这个过程称为"索引".索引服务可以从 ...
- 【Linux基础】ps命令详解
PS命令介绍 Linux中的ps命令是Process Status的缩写.ps命令用来列出系统中当前运行的那些进程.ps命令列出的是当前那些进程的快照,就是执行ps命令的那个时刻的那些进程,如果想要动 ...
- nginx配置限制同一个ip的访问频率方法
1.在nginx.conf里的http{}里加上如下代码: limit_conn_zone $binary_remote_addr zone=perip:10m; limit_conn_zone ...
- ZYNQ使用ymodem协议传输文件
SDK: V2014.4 协议: Ymodem 工具: USB转UART转接线.xshell6软件 可实现各种文件传输,大小不限,只是速度很慢 参考原代码如下: /****************** ...
- FrameScan CMS漏洞扫描
工具简介 GithubL:https://github.com/qianxiao996/FrameScan FrameScan是一款python3编写的简易的cms漏洞检测框架,支持多种检测方式,支持 ...
- [转载]nc命令详解
最近在搞反向连接,试来试去发现最好的工具还是nc.正好趁这个机会把nc的用法总结一下: 1.端口扫描: nc -vv ip port 例:nc -vv 192.168.1.1 5000 扫描192.1 ...