• 售前

  • 售后

热门帖子
入门百科

Nginx的一些常用设置与技巧总结

[复制链接]
戏做顿 显示全部楼层 发表于 2021-10-26 12:46:43 |阅读模式 打印 上一主题 下一主题
媒介
文章列举了几个Nginx常见的,实用的,风趣的配置,渴望看过之后能说一句:学到了!
一个站点配置多个域名
  1. server {
  2. listen 80;
  3. server_name ops-coffee.cn b.ops-coffee.cn;
  4. }
复制代码
server_name 后跟多个域名即可,多个域名之间用空格分隔
一个服务配置多个站点
  1. server {
  2. listen 80;
  3. server_name a.ops-coffee.cn;
  4. location / {
  5. root /home/project/pa;
  6. index index.html;
  7. }
  8. }
  9. server {
  10. listen 80;
  11. server_name ops-coffee.cn b.ops-coffee.cn;
  12. location / {
  13. root /home/project/pb;
  14. index index.html;
  15. }
  16. }
  17. server {
  18. listen 80;
  19. server_name c.ops-coffee.cn;
  20. location / {
  21. root /home/project/pc;
  22. index index.html;
  23. }
  24. }
复制代码
基于Nginx虚拟主机配置实现,Nginx有三种范例的虚拟主机
基于IP的虚拟主机: 须要你的服务器上有多个所在,每个站点对应不同的所在,这种方式使用的比力少
基于端口的虚拟主机: 每个站点对应不同的端口,访问的时间使用ip:port的方式访问,可以修改listen的端口来使用
基于域名的虚拟主机: 使用最广的方式,上边例子中就是用了基于域名的虚拟主机,前提条件是你有多个域名分别对应每个站点,server_name填写不同的域名即可
nginx添加账号密码验证
  1. server {
  2. location / {
  3. auth_basic "please input user&passwd";
  4. auth_basic_user_file key/auth.key;
  5. }
  6. }
复制代码
有许多服务通过nginx访问,但本身没有提供账号认证的功能,就可以通过nginx提供的authbase账号密码认证来实现,可以用以下脚原来天生账号的密码
  1. # cat pwd.pl
  2. #!/usr/bin/perl
  3. use strict;
  4. my $pw=$ARGV[0] ;
  5. print crypt($pw,$pw)."\n";
复制代码
使用方法:
  1. # perl pwd.pl ops-coffee.cn
  2. opf8BImqCAXww
  3. # echo "admin:opf8BImqCAXww" > key/auth.key
复制代码
nginx开启列目次

当你想让nginx作为文件下载服务器存在时,须要开启nginx列目次
  1. server {
  2. location download {
  3.   autoindex on;
  4.   autoindex_exact_size off;
  5.   autoindex_localtime on;
  6. }
  7. }
复制代码
autoindex_exact_size: 为on(默认)时表现文件简直切大小,单位是byte;改为off表现文件大概大小,单位KB或MB或GB
autoindex_localtime: 为off(默认)时表现的文件时间为GMT时间;改为on后,表现的文件时间为服务器时间
默认当访问列出的txt等文件时会在浏览器上表现文件的内容,假如你想让浏览器直接下载,加上下边的配置
  1. if ($request_filename ~* ^.*?\.(txt|pdf|jpg|png)$) {
  2. add_header Content-Disposition 'attachment';
  3. }
复制代码
配置默认站点
  1. server {
  2. listen 80 default;
  3. }
复制代码
当一个nginx服务上创建了多个虚拟主机时默认会从上到下查找,假如匹配不到虚拟主机则会返回第一个虚拟主机的内容,假如你想指定一个默认站点时,可以将这个站点的虚拟主机放在配置文件中第一个虚拟主机的位置,或者在这个站点的虚拟主机上配置listen default
不允许通过IP访问
  1. server {
  2. listen  80 default;
  3. server_name _;
  4. return  404;
  5. }
复制代码
可能有一些未存案的域名或者你不渴望的域名将服务器所在指向了你的服务器,这时间就会对你的站点造成肯定的影响,须要克制IP或未配置的域名访问,我们使用上边所说的default规则,将默认流量都转到404去
上边这个方法比力粗暴,当然你也可以配置下所有未配置的所在访问时直接301重定向到你的网站去,也能为你的网站带来肯定的流量
  1. server {
  2. rewrite ^/(.*)$ https://ops-coffee.cn/$1 permanent;
  3. }
复制代码
直接返回验证文件
  1. location = /XDFyle6tNA.txt {
  2. default_type text/plain;
  3. return 200 'd6296a84657eb275c05c31b10924f6ea';
  4. }
复制代码
许多时间微信等程序都须要我们放一个txt的文件到项目里以验证项目归属,我们可以直接通过上边这种方式修改nginx即可,无需真正的把文件给放到服务器上
nginx配置upstream反向代理
  1. http {
  2. ...
  3. upstream tomcats {
  4.   server 192.168.106.176 weight=1;
  5.   server 192.168.106.177 weight=1;
  6. }
  7. server {
  8.   location /ops-coffee/ {
  9.    proxy_pass http://tomcats;
  10.    proxy_set_header Host $host;
  11.    proxy_set_header X-Real-IP $remote_addr;
  12.    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  13.    proxy_set_header X-Forwarded-Proto $scheme;
  14.   }
  15. }
  16. }
复制代码
稍不留意可能会落入一个proxy_pass加杠不加杠的陷阱,这里具体说下proxy_pass http://tomcats与proxy_pass http://tomcats/的区别:
固然只是一个/的区别但结果确千差万别。分为以下两种情况:
1.  目标所在中不带uri(proxy_pass http://tomcats)。此时新的目标url中,匹配的uri部门不做修改,原来是什么就是什么。
  1. location /ops-coffee/ {
  2. proxy_pass http://192.168.106.135:8181;
  3. }
  4. http://domain/ops-coffee/ -->  http://192.168.106.135:8181/ops-coffee/
  5. http://domain/ops-coffee/action/abc -->  http://192.168.106.135:8181/ops-coffee/action/abc
复制代码
2.  目标所在中带uri(proxy_pass http://tomcats/,/也是uri),此时新的目标url中,匹配的uri部门将会被修改为该参数中的uri。
  1. location /ops-coffee/ {
  2. proxy_pass http://192.168.106.135:8181/;
  3. }
  4. http://domain/ops-coffee/ -->  http://192.168.106.135:8181
  5. http://domain/ops-coffee/action/abc -->  http://192.168.106.135:8181/action/abc
复制代码
nginx upstream开启keepalive
  1. upstream tomcat {
  2. server ops-coffee.cn:8080;
  3. keepalive 1024;
  4. }
  5. server {
  6. location / {
  7.   proxy_http_version 1.1;
  8.   proxy_set_header Connection "";
  9.   proxy_pass http://tomcat;
  10. }
  11. }
复制代码
nginx在项目中大多数情况下会作为反向代理使用,比方nginx后接tomcat,nginx后接php等,这时我们开启nginx和后端服务之间的keepalive可以或许淘汰频繁创建TCP连接造成的资源斲丧,配置如上
keepalive: 指定每个nginxworker可以保持的最大连接数量为1024,默认不设置,即nginx作为client时keepalive未生效
proxy_http_version 1.1: 开启keepalive要求HTTP协议版本为HTTP 1.1
proxy_set_header Connection "": 为了兼容老的协议以及防止http头中有Connection close导致的keepalive失效,这里须要及时清掉HTTP头部的Connection
404主动跳转到首页
  1. server {
  2. location / {
  3.   error_page 404 = @ops-coffee;
  4. }
  5. location @ops-coffee {
  6.   rewrite .* / permanent;
  7. }
  8. }
复制代码
网站出现404页面不是特殊友好,我们可以通过上边的配置在出现404之后给主动跳转到首页去
总结
以上就是这篇文章的全部内容了,渴望本文的内容对各人的学习或者工作具有肯定的参考学习代价,谢谢各人对草根技术分享的支持。

帖子地址: 

回复

使用道具 举报

分享
推广
火星云矿 | 预约S19Pro,享500抵1000!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

草根技术分享(草根吧)是全球知名中文IT技术交流平台,创建于2021年,包含原创博客、精品问答、职业培训、技术社区、资源下载等产品服务,提供原创、优质、完整内容的专业IT技术开发社区。
  • 官方手机版

  • 微信公众号

  • 商务合作