当前位置:首页 > 教程收藏 > 正文内容

Nginx的几个常用配置和技巧

fanren3年前 (2022-08-12)教程收藏100

一个站点配置多个域名

server {
    listen       80;
    server_name  ops-coffee.cn b.ops-coffee.cn;
}

server_name 后跟多个域名即可,多个域名之间用空格分隔

一个服务配置多个站点

server {
    listen       80;
    server_name  a.ops-coffee.cn;

    location / {
        root /home/project/pa;
        index index.html;
    }
}

server {
    listen       80;
    server_name  ops-coffee.cn b.ops-coffee.cn;

    location / {
        root /home/project/pb;
        index index.html;
    }
}

server {
    listen       80;
    server_name  c.ops-coffee.cn;

    location / {
        root /home/project/pc;
        index index.html;
    }
}

基于Nginx虚拟主机配置实现,Nginx有三种类型的虚拟主机

基于IP的虚拟主机: 需要你的服务器上有多个地址,每个站点对应不同的地址,这种方式使用的比较少

基于端口的虚拟主机: 每个站点对应不同的端口,访问的时候使用ip:port的方式访问,可以修改listen的端口来使用

基于域名的虚拟主机: 使用最广的方式,上边例子中就是用了基于域名的虚拟主机,前提条件是你有多个域名分别对应每个站点,server_name填写不同的域名即可

nginx添加账号密码验证

server {
    location / {
        auth_basic "please input user&passwd";
        auth_basic_user_file key/auth.key;
    }
}

有很多服务通过nginx访问,但本身没有提供账号认证的功能,就可以通过nginx提供的authbase账号密码认证来实现,可以用以下脚本来生成账号的密码

# cat pwd.pl 
#!/usr/bin/perl
use strict;

my $pw=$ARGV[0] ;
print crypt($pw,$pw)."\n";

使用方法:

# perl pwd.pl ops-coffee.cn
opf8BImqCAXww
# echo "admin:opf8BImqCAXww" > key/auth.key

nginx开启列目录

当你想让nginx作为文件下载服务器存在时,需要开启nginx列目录

server {
    location download {
        autoindex on;

        autoindex_exact_size off;
        autoindex_localtime on;
    }
}

autoindex_exact_size: 为on(默认)时显示文件的确切大小,单位是byte;改为off显示文件大概大小,单位KB或MB或GB

autoindex_localtime: 为off(默认)时显示的文件时间为GMT时间;改为on后,显示的文件时间为服务器时间

默认当访问列出的txt等文件时会在浏览器上显示文件的内容,如果你先让浏览器直接下载,加上下边的配置

if ($request_filename ~* ^.*?\.(txt|pdf|jpg|png)$) {
    add_header Content-Disposition 'attachment';
}

配置默认站点

server {
    listen 80 default;
}

当一个nginx服务上创建了多个虚拟主机时默认会从上到下查找,如果匹配不到虚拟主机则会返回第一个虚拟主机的内容,如果你想指定一个默认站点时,可以将这个站点的虚拟主机放在配置文件中第一个虚拟主机的位置,或者在这个站点的虚拟主机上配置listen default

不允许通过IP访问

server {
    listen       80 default;
    server_name  _;

    return      404;
}

可能有一些未备案的域名或者你不希望的域名将服务器地址指向了你的服务器,这时候就会对你的站点造成一定的影响,需要禁止IP或未配置的域名访问,我们利用上边所说的default规则,将默认流量都转到404去

上边这个方法比较粗暴,当然你也可以配置下所有未配置的地址访问时直接301重定向到你的网站去,也能为你的网站带来一定的流量

server {
    rewrite ^/(.*)$ https://ops-coffee.cn/$1    permanent;
}

直接返回验证文件

location = /XDFyle6tNA.txt {
    default_type text/plain;
    return 200 'd6296a84657eb275c05c31b10924f6ea';
}

很多时候微信等程序都需要我们放一个txt的文件到项目里以验证项目归属,我们可以直接通过上边这种方式修改nginx即可,无需真正的把文件给放到服务器上

nginx配置upstream反向代理

http {
    ...
    upstream tomcats {
        server 192.168.106.176 weight=1;
        server 192.168.106.177 weight=1;
    }

    server {
        location /ops-coffee/ { 
            proxy_pass http://tomcats; 

            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
        }
    }

}

稍不注意可能会落入一个proxy_pass加杠不加杠的陷阱,这里详细说下proxy_pass http://tomcatsproxy_pass http://tomcats/的区别:

虽然只是一个/的区别但结果确千差万别。分为以下两种情况:

1.目标地址中不带uri(proxy_pass http://tomcats)。此时新的目标url中,匹配的uri部分不做修改,原来是什么就是什么。

location /ops-coffee/ {
    proxy_pass  http://192.168.106.135:8181;
}

http://domain/ops-coffee/   -->     http://192.168.106.135:8181/ops-coffee/
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。

location /ops-coffee/ {
    proxy_pass  http://192.168.106.135:8181/;
}

http://domain/ops-coffee/   -->     http://192.168.106.135:8181
http://domain/ops-coffee/action/abc   -->     http://192.168.106.135:8181/action/abc

nginx upstream开启keepalive

upstream tomcat {
    server ops-coffee.cn:8080;
    keepalive 1024;
}

server {
    location / {
        proxy_http_version 1.1;
        proxy_set_header Connection "";

        proxy_pass http://tomcat;
    }
}

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自动跳转到首页

server {
    location / {
       error_page 404 =  @ops-coffee;
    }

    location @ops-coffee {
       rewrite  .*  / permanent;
    }
}

网站出现404页面不是特别友好,我们可以通过上边的配置在出现404之后给自动跳转到首页去

“Nginx的几个常用配置和技巧” 的相关文章

甲骨文小鸡开机后的常用脚本

Root权限:sudo -iRoot密码修改:bash <(curl -Ls https://github.com/baoqihui/script/raw/main/root.sh)或sudo -iwget -N https://cdn.jsdelivr.net/gh/Misaka-blog/...

LinuxMirrors — 一键脚本彻底解决linux换源问题

国内vps安装好linux系统后(centos,debian,ubuntu等),除了deepin以外,其他Linux发行版从官方源下载东西都很慢,这个时候,我们就需要给自己的系统换一个镜像源了,使用镜像源不仅可以给官方源的服务器减压,还能提供更快的速度。这也是为啥,我们总需要换源的原因!!当然,换源...

rsync 用法教程

一、简介rsync 是一个常用的 Linux 应用程序,用于文件同步。它可以在本地计算机与远程计算机之间,或者两个本地目录之间同步文件(但不支持两台远程计算机之间的同步)。它也可以当作文件复制工具,替代cp和mv命令。它名称里面的r指的是 remote,rsync 其实就是"远程同步&qu...

zblog批量修改文章发布状态

本案例为通过txt文档输入N多个文章id,然后根据txt输入的ID批量对文章状态进行修改。操作步骤如下:1、在网站根目录创建txt文件,命名为id.txt;2、在txt里面批量写入需要修改状态的id,每个id占一行;3、在网站根目录创建php文件,命名为id.php;4、在文件内写入php代码<...

redis清空缓存内容

有时候Wordpress开启redis缓存后会导致后天进不去跳转到首页的问题,排查下来原因可能是redis导致的,我们来手动清除一下redis对缓存教程开始ssh连接后 输入 redis-cli 进入redis,执行 flushall 出现OK这清除完成,然后输入 exit 退出即可。[root@V...

linux挂载磁盘分区步骤

在进行操作之前,一定要先做好快照,不然配置文件写错了会导致服务器无法启动,救起来特别麻烦一、Centos的操作这篇文章主要介绍了linux如何永久挂载新硬盘和/etc/fstab配置文件的说明,磁盘格式化,磁盘管理、挂载新硬盘(linux运维基础)。首先列出文件系统的整体磁盘空间使用情况。可以用来查...

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。