IP捆绑域名
访问域名,打开指定的静态html页面
前提:先把域名解析到ip下,才能捆绑使用
server_name
:这里配置自己的域名
1 2 3 4 5 6 7 8 9
| server { listen 80; server_name 127.0.0.1; location / { root html; index index.html index.htm; } }
|
代理转发
访问资源目录
使用域名或ip,访问服务器文件夹。域名 + /静态资源相对路径
1 2 3 4 5 6
| server{ listen 80; server_name 127.0.0.1; root /usr/local/nginx/html/files; }
|
访问HTML
1 2 3 4 5 6 7 8 9
| server{ listen 80; server_name 127.0.0.1; location ~^/ { root html; index index.html index.htm; } }
|
同一台服务器下,使用不同域名,访问不同文件夹下的默认html页面
注意,root:对应的文件夹路径,是服务器中的绝对路径,不是以/ngixn/html文件夹的相对路径。
并且 index:输入域名,默认跳转的页面
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| server{ listen 80; server_name aaa.renyuxin.cn; location / { root /demo/one; index index.html; } } server{ listen 80; server_name bbb.renyuxin.cn; location / { root /demo/two; index index.html; } }
|
域名转端口
同一台服务器下,使用不同域名,通过不同端口,访问不同的项目
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| server{ listen 80; server_name blog.renyuxin.cn; location ~^/ { proxy_pass http://127.0.0.1:8001; } location /soulsoup/ { proxy_pass http://127.0.0.1:8001/soulsoup; }
}
server{ listen 80; server_name blog2.renyuxin.cn; location ~^/ { proxy_pass http://127.0.0.1:8002; } location /soulsoup/ { proxy_pass http://127.0.0.1:8002/soulsoup; }
}
|
强制转发
- 场景1:由于访问
http协议
不安全,强制将server_name
的域名或ip转成https协议
。
例如:访问http://blog.renyuxin.cn
自动跳转访问https://blog.renyuxin.cn
。
- 场景2:将
https
页面中的所有http请求
转换成https请求
。在日常开发过程中,经常会遇到https中出现http请求,由于安全策略问题,导致无法访问。所以就需要在nginx端将http强制转为https请求。
例如:在https
://blog.renyuxin.cn的页面中,出现了 http
://8.123.456.789:8001/getList 这样的请求,但是这个请求无法访问,所以需要强制转为:https
://blog.renyuxin.cn:8001/getList
1 2 3 4 5
| server { listen 80; server_name blog.renyuxin.cn 8.123.456.789; rewrite ^(.*) https://$server_name$1 permanent; }
|
有些项目可能会遇到重复CORS
冲突,那么就需要将后端返回的CORS
头移除,解决跨域问题
可以在server的location
中添加如下代码,即可移除后端返回的CORS
头。
1 2 3 4 5 6
| proxy_hide_header 'Access-Control-Allow-Origin';
add_header 'Access-Control-Allow-Origin' '*'; add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS'; add_header 'Access-Control-Allow-Headers' 'Authorization, Content-Type';
|
Stream端口转发
大陆域名转发到海外服务器的操作,常用于:
当本地直接ping海外出现丢包甚至超时的时候,大陆服务器当跳板,转海外服务器
listen
:后面填写源端口(也就是当前服务器端口),默认协议为TCP,可以指定为UDP协议
proxy_connect_timeout
:连接超时时间
proxy_timeout
:超时时间
proxy_pass
:填写转发目标的IP及端口号
注意:Ngixn可以将IPV4
的数据包转发到IPV6
,IPV6
的IP
需要使用[]
括起来。
参考【关于Nginx中Stream模块配置】
参考【官方文档】
源码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
| stream { upstream backend { hash $remote_addr consistent;
server backend1.example.com:12345 weight=5; server 127.0.0.1:12345 max_fails=3 fail_timeout=30s; server unix:/tmp/backend3; }
upstream dns { server 192.168.0.1:53535; server dns.example.com:53; }
server { listen 12345; proxy_connect_timeout 1s; proxy_timeout 3s; proxy_pass backend; }
server { listen 127.0.0.1:53 udp reuseport; proxy_timeout 20s; proxy_pass dns; }
server { listen [::1]:12345; proxy_pass unix:/tmp/stream.socket; } }
|
案例实例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| stream { server { listen 12345; proxy_connect_timeout 5s; proxy_timeout 20s; proxy_pass 192.168.1.23:3306; } server { listen 53 udp reuseport; proxy_timeout 20s; proxy_pass 192.168.1.23:53; } server { listen 9135; proxy_connect_timeout 10s; proxy_timeout 30s; proxy_pass [2607:fcd0:107:3cc::1]:9135; } }
|
域名访问,路由转发
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| server{ listen 80; server_name blog.renyuxin.cn;
location / { root /demo/dist; index index.html; try_files $uri $uri/ /index.html; } location /prod-api/{ proxy_pass http://127.0.0.1:8001/; proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header REMOTE-HOST $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; }
}
|
综合问题
访问svg资源
nginx启动成功,jpg、png等静态资源可以正常访问,但是svg格式不能访问
1 2 3 4 5 6 7 8
| server{ listen 80; server_name file.renyuxin.cn; location ~* ^.+\.(jpg|jpeg|gif|png|ico|css|js|pdf|txt|svg){ root /usr/local/nginx/html/file; add_header Access-Control-Allow-Origin *; } }
|
访问文件存储路径
如果在服务器上建了一个存储目录,一般存储各种格式的文件,现在需要从网页上访问这个存储目录,下面这个配置可以解决
ps:如果想强制下载指定文件,就需要添加add_header Content-Disposition 'attachment; filename="$arg_filename"';
这个代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| location /files/ { autoindex on; autoindex_exact_size off; autoindex_localtime on; types { application/vnd.openxmlformats-officedocument.spreadsheetml.sheet xlsx; application/vnd.ms-excel xls; } add_header Content-Disposition 'attachment; filename="$arg_filename"'; }
|
特定文件类型 types,还有其他类型,可以参考下面这个
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| text/plain txt; text/html html htm; text/css css; application/javascript js; application/json json; image/jpeg jpg jpeg; image/png png; image/gif gif; image/svg+xml svg; image/webp webp; audio/mpeg mp3; video/mp4 mp4; application/pdf pdf; application/zip zip; application/x-tar tar; application/gzip gz; application/vnd.ms-excel xls; application/vnd.openxmlformats-officedocument.spreadsheetml.sheet xlsx; application/msword doc; application/vnd.openxmlformats-officedocument.wordprocessingml.document docx; application/vnd.ms-powerpoint ppt; application/vnd.openxmlformats-officedocument.presentationml.presentation pptx;
|