slomkowski / nginx-config-formatter Goto Github PK
View Code? Open in Web Editor NEWnginx config file formatter/beautifier written in Python with no additional dependencies.
License: Apache License 2.0
nginx config file formatter/beautifier written in Python with no additional dependencies.
License: Apache License 2.0
Multiline log_format
does not correction the alignment
Input data:
http {
log_format main '.......'
'....';
}
Output result
http {
log_format main '.......'
'....';
}
No need special treatment for variable ${} , because any expression with "{" should be enclosed in single or double quotes.
So, we just need to substitute {
and }
in single or double quotes.
I think the transfer of the review to a new position should occur on the line above or not occur quite
server {
listen 80 default_server;
server_name localhost;
location / {
proxy_set_header X-User-Authorization "Internal ${cookie_access_token}";
}
}
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
server {
listen 80 default_server;
server_name localhost;
location / {
proxy_set_header X-User-Authorization "Internal $ {
cookie_access_token
}
";
}
}
nginx: [emerg] invalid variable name in /etc/nginx/nginx.conf:63
nginx: configuration file /etc/nginx/nginx.conf test failed
Input data:
http {
server {
listen 80;
# add_header Strict-Transport-Security "max-age=3600; includeSubDomains";
add_header Strict-Transport-Security "max-age=3600; includeSubDomains";
}
}
Output result
http {
server {
listen 80;
# add_header Strict-Transport-Security "max-age=3600; includeSubDomains";
add_header Strict-Transport-Security "max-age=3600;
includeSubDomains";
}
}
Other NGINX config formatter (AWK): https://github.com/lovette/nginx-tools/tree/master/nginx-minify-conf
add_header alt-svc 'h3=":443"; ma=86400, h3-29=":443"; ma=86400' always;
will be break into 3 lines and like this:
add_header alt-svc 'h3=":443";
ma=86400, h3-29=":443";
ma=86400' always;
Though it passes the nginx conf test but SSL will break.
It would be cool if while formatting it could use editorconfig settings.
Hi, this is a feature request for an option to print the formatted contents to stdout without saving them to a file. This would allow to use this program with formatting tools that work with stdin/stdout such as vim-autoformat. The stdin can already be handled by passing /dev/stdin
as the filename. Should be relatively simple to implement, if you want, I could whip up a pull request.
Any issues with this being refactored to work as a library? I'm working on a project which uses this but at the moment which uses nginxfmt.py but I'd ideally like to reference this as a pip package instead, or at the very least a git package link.
The tool doesnt handle nginx vars${variable}
nor jinja2 templating variable {{ variable }}
At least #1 should be fixable
Normalization inside comments is required, if possible, after position alignment.
Input data:
http {
#log_format main "......."
# "....";
# '....';
# "....";
# '....';
}
Output result
http {
#log_format main "......."
# "....";
# '....'; < unalignment
# "...."; < unalignment
# '....'; < unalignment
}
May be add 4 space after proxy_set_header for improve readability?
Before
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-IP $remote_addr;
After
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-IP $remote_addr;
E.g. if the config file contains a german "für", it will crash with an encoding error.
Reported in NixOS/nixpkgs#57979 (comment):
The following configuration:
location /example { allow 192.168.0.0/16; deny all; }
results in
location /example {
allow 192.168.0.0/16;
deny all;
}
;
the trailing ;
will produce an error message in nginx like this:
апр 08 14:55:45 web.elven.pw systemd[1]: Starting Nginx Web Server...
апр 08 14:55:45 web.elven.pw pnzhwc1q1is8vbdkg34ksicqq9jh5chc-unit-script-nginx-pre-start[2430]: nginx: [emerg] unexpected ";" in /nix/store/glvppaxv9gqg9vj179ph9rmj8yg41d72-nginx.conf:151
The nginx version is 1.14.2.
This (it comes from sample nginx magento snippet)
gzip_types
text/plain
text/css
text/js
text/xml
text/javascript
application/javascript
application/x-javascript
application/json
application/xml
application/xml+rss
image/svg+xml;
is converted to
gzip_types
text/plain
text/css
text/js
text/xml
text/javascript
application/javascript
application/x-javascript
application/json
application/xml
application/xml+rss
image/svg+xml;
Could it format such multiline values the padded way?
given:
location /nginx_status {
# Don't break
stub_status on;
access_log off;
allow 127.0.0.1;
deny all;
}
we expect:
location /nginx_status {
# Don't break
stub_status on;
access_log off;
allow 127.0.0.1;
deny all;
}
but instead we get:
location /nginx_status {
# Don't break
stub_status on;
access_log off;
allow 127.0.0.1;
deny all;
}
and all subsequent lines are aligned to the indentation of the comment with '
in it. Looks like it's trying to parse the comment as an nginx string and then never escaping the comment alignment? Probably related to #11.
nginxbeautifier.com seems to be offline. would be great if there was an online version of this for easy use without installing local packages.
server_name "~^(?<tag>[0-9a-f]{8}\-[0-9a-f]{4}\-[0-9a-f]{4}\-[0-9a-f]{4}\-[0-9a-f]{12})\.a\.b\.com$";
will be splitted into multiple line
eg.
location ~ /\.ht {
deny all;
}
after formatted will look like this
location ~ /
\
.ht {
deny all;
#}
Input
location ~ "\.pagespeed\.([a-z]\.)?[a-z]{2}\.[^.]{10}\.[^.]+" {
add_header "" "";
}
Output
location ~ "\.pagespeed\.([a-z]\.)?[a-z] {
2
}
\.[^.] {
10
}
\.[^.]+" {
add_header "" "";
}
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.