Nginx 最实用的配置技巧,用到过才是老司机

幸运
185
文章
0
评论
March 15, 202009:36:30 评论 72 4333字阅读14分26秒
文章列举了几个Nginx常见的,实用的,有趣的配置,希望看过之后能说一句:学到了!

一个站点配置多个域名

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)."
";

使用方法:

# 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://tomcats与proxy_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 最实用的配置技巧,用到过才是老司机-幸运草博客
特别声明:以上文章内容仅代表作者本人观点,不代表幸运草博客观点或立场。如有关于作品内容、版权或其它问题请于作品发表后的30日内与幸运草联系。

  • 本站QQ群
  • weinxin
  • 捐赠本站
  • weinxin
Nginx手把手安装 Nginx

Nginx手把手安装

Netcraft 发布了2018年1月 Web 服务器调查报告,排名前三的依然是 Microsoft、Apache 和 nginx 。 Nginx为什么值得学习呢?可以看这篇文章 → Nginx的优点 (我保证可以点进去) 1.系统环境准备 安装Nginx,一般都是选择linux环境下安装。可以在虚拟机里面搭建一个或者在阿里云、腾讯云、滴滴云等买一个相对便宜的。 2.环境调试确认 网络畅通,ping 一下百度,查看公网连通性 √ yum可用,yum list | grep gcc ,查看yum源是否可用。√ 关闭iptables,可以使用iptables -L 查看是否存在iptables规则;关闭:iptables -F 关闭selinux,使用 getenforce ,  查看状态,使用 setenforce 0  关闭selinux。 安装库: yum -y  install gcc gcc-c++ autoconfig pcre pcre-devel make automake yum -y  install wget  httpd-tools vim 3.配置Nginx的yum源 进入官网 nginx.org,打开下载页面,可以看到三个模块: 继续往下拉,我选择使用yum安装nginx 按照官网文档说明,步骤如下: 创建文件 nginx.repo,执行命令 vi /etc/yum.repos.d/nginx.repo 按i 输入以下内容: name=nginx repo baseurl=http://nginx.org/packages/centos/7/$basearch/ gpgcheck=0 enabled=1 提示:标红部分按照你的实际情况做相应的替换。版本号写大版本即可,比如 7 不写7.3这样的 使用:lsb_release -a 可以查看你的l机器的版本。(这个命令适用于所有的Linux发行版,包括Redhat、SuSE、Debian…等发行版) 使用:cat /etc/redhat-release (仅限REDHAT系列的linux使用) 配置完毕之后,按Esc之后,输入 :wq 保存退出。 检查yum源,输入yum list | grep nginx 4.开始安装 安装:yum install nginx 等待.... 安装完毕使用 nginx -v查看安装是否成功 本文来源于:Nginx手把手安装-幸运草博客 特别声明:以上文章内容仅代表作者本人观点,不代表幸运草博客观点或立场。如有关于作品内容、版权或其它问题请于作品发表后的30日内与幸运草联系。
nginx实例 - 如何防止大图片占满带宽? Nginx

nginx实例 – 如何防止大图片占满带宽?

场景 前几天网站出现了访问缓慢的情况,查看系统资源状况后,发现出网带宽一直是占满的状态 查看服务器日志,发现了很多10M左右的超大图片的请求,这些图片占满了带宽,严重影响了其他的访问请求 正常情况下是应该访问缩放过的小图,一般在100K以内,查找问题和修改程序来不及,需要紧急处理 想到的方法就是对大图的加载进行限速 配置 修改nginx配置文件中图片访问的配置部分 思路: 对于正常小图的访问不限制,把正常图的大小限定为 100K 以内,超出时就进行限速,速度限定为最大 100k/s location ~ .*.(gif|jpg|jpeg|png|bmp)$ { expires 30d; limit_rate_after 100k; limit_rate 100k; } limit_rate_after 100k; limit_rate 100k; 这两句的意思就是当图片加载了100k以后进行限速,最高 100k 测试 测试服务器带宽为1M,准备了一张3.3M的图片 分别测试限速前后的网络情况,使用网络监控命令进行查看 限速前 访问图片,查看网络流量状态,速度一直保持在 130k/s 左右,正好为1M带宽的满载状态 限速后 访问图片,查看网络流量状态,速度一直保持在 100k/s 左右,说明限速成功 本文来源于:nginx实例 - 如何防止大图片占满带宽?-幸运草博客 特别声明:以上文章内容仅代表作者本人观点,不代表幸运草博客观点或立场。如有关于作品内容、版权或其它问题请于作品发表后的30日内与幸运草联系。
Nginx网站服务 Nginx

Nginx网站服务

1、Nginx:(优点) (1)高性能、轻量级web服务软件 (2)稳定性高 (3)系统资源消耗低 (4)对http并发连接的处理能力强 2、apache和nginx的区别: Apache:是多进程web服务,适合cpu密集型业务  如:数据库查询、计算等。 Nginx:是单进程web服务,适合磁盘IO密集型业务 如:视频,音频网站。并发能力强。 在企业中经常使用nginx和apache结合,前端为nginx,处理高并发进行调度;后端由多台apache进行业务响应,实现负载均衡。 3、Nginx的安装 (1)安装支持软件 pcre-devel           zlib-devel (2)创建运行用户、组 Useradd  -M  -s  /sbin/nologin  nginx (3)编译安装 ./configure  --prefix=/usr/local/nginx  --user=nginx --group=nginx  --with-http_stub_status_module(状态统计模块) 4、Nginx的运行控制 nginx  -t            检查nginx语法 启动nginx         nginx     端口号:80 重新加载nginx     killall -s  HUP  nginx 退出nginx         killall -s  QUIT  nginx 杀死nginx         killal -s  KILL  nginx 5、主配置文件nginx.conf的配置项:路径:/usr/local/nginx/conf/nginx.conf (1)全局配置 worker_processes        工作进程数 (2)I/O配置:使用”events{ }”界定标记 worker_connections       每进程处理连接数 (3)HTTP配置:包括日志、端口及IP、网页目录、默认字符集、连接保持时间、虚拟主机、PHP解析等 (子标记:server{ }代表一个虚拟主机) 6、LNMP:Linux、Nginx、Mysql、PHP (1)由于nginx不能直接支持PHP,编译安装PHP时 必须启用fpm模块以解析PHP网页。(--enable-fpm) php-fpm进程    端口号为:9000 启动命令:php-fpm或 /usr/local/sbin/php-fpm(安装php时创建了链接文件) 停止命令:killall  php-fpm (2)也可以使用LAMP服务器最为代理解析PHP动态网页 本文来源于:Nginx网站服务-幸运草博客 特别声明:以上文章内容仅代表作者本人观点,不代表幸运草博客观点或立场。如有关于作品内容、版权或其它问题请于作品发表后的30日内与幸运草联系。
nginx配置二级域名 Nginx

nginx配置二级域名

主机域名配置那些事 server_name 匹配顺序 nginx中的server_name是用于指定基于名称的虚拟主机,匹配顺序是在配置文件中检索,从上到下,一匹配到符合的则终止,所以配置得按照精准在上,模糊在下来配置。server在配置文件中可以有多个哦。 精准的server_name: server {   listen 80;   server_name test.org www.test.org } *通配符匹配 server {   listen 80;   server_name *.test.org } server {   listen 80;   server_name www.*; } 正则匹配 server {   listen 80;   server_name ~^(?<www>.+).test.org$; } 例子 一个server块配置多个站点 server {   listen 80;   server_name ~^(www.)?(.+)$;   index index.html index.htm;   root /data/www/$2; } 这样的站点意思是匹配所有www开头的,$2对应正则匹配的第二块,也就是(.+)路径,路径自行创建指定,确保有权限,实际目录结构如下: /data/www/test.org /data/www/test123.org /data/www/baidu.com 一个server块中匹配多个二级域名 server {   listen 80;   server_name ~^(.+)?.test.org$;   index index.html;   if ($host = test.org) {       rewrite ^http://www.test.org permanent;   }   root /data/www/test.org/$1; } 对应匹配如下: /data/www/test.org/www /data/www/test.org/hello /data/www/test.org/world...
匿名

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: