1、Nginx虚拟主机配置

    nginx一个虚拟主机使用一个serer{}配置,可以同时配置多个server。

例如:配置 和

配置如下:

user nginx;worker_processes  1;worker_rlimit_nofile 65535;events {    worker_connections  2048;}http {    include       mime.types;    default_type  application/octet-stream;        server {            listen       80;            server_name  www.a.com;        }    server {            listen 80 default_server;            server_name www.b.org;            root /www/b.org;        }}

在本机hosts文件中添加解析记录

172.16.42.180   www.a.com172.16.42.180   www.b.org

分别访问 和

image.png

image.png

2、nginx基于IP地址,使用access模块做访问控制

nginx访问控制用deny和allow两个指令来控制,例如修改

 server {        listen 80 default_server;        server_name www.b.org;        root /www/b.org;        deny 172.16.42.1;        allow 172.16.0.0/16;        deny all;    }

172.16.42.1 是Mac的IP,再次访问被拒绝

image.png

3、基于用户的访问控制

如果nginx想基于用户做访问控制,在需要在server{}中增加以下配置:

local url {    root path;    auth_basic "admin area";    auth_basic_user_file /etc/nginx/.htpasswd;}

auth_basic:表示为什么做访问控制,

auth_basic_user_file:作访问控制使用的账户密码文件。可以使用htpasswd 命令来创建

测试:

修改

   server {        listen 80 default_server;        server_name www.b.org;        root /www/b.org;        location /admin/ {            root /www/b.org;            auth_basic "admin area";            auth_basic_user_file /etc/nginx/.htpasswd;        }    }

创建密码文件: 第一次创建时使用"-c"参数

htpasswd -c -m /etc/nginx/.htpasswd tomhtpasswd  -m /etc/nginx/.htpasswd paul

reload下nginx,测试访问

image.png

image.png

4、建立下载站点时,使用autoindex模块, 自动列出所有目录和文件

配置方法:在server{}, 配置中加入以下配置:

location /download {       root /www/b.org;       autoindex on;}

例如:修改

   server {        listen 80 default_server;        server_name www.b.org;        root /www/b.org;        location /download {            root /www/b.org;            autoindex on;        }    }

image.png

5、URL rewrite

    rewrite regex replacement [flag];

  

 flag: 标志位,包含以下选项:

  • last:一旦被当前规则匹配并重写后立即停止检查后续的其他rewrite的规则,而通过重写后的规则重新发起请求;

  • break:一旦被当前规则匹配并重写后立即停止后续的其他rewrite的规则,而后继续由nginx进行后续操作;

  • redirect: 返回302临时重定向;

  • permanent:返回301永久重定向;

注意:一般将rewrite写在location中时都使用break标志,或者将rewrite写在if上下文中;

例1:

location / {    root /www/b.org;    rewrite ^/images/(.*)$ /imgs/$1;}

解释:如果访问的uri是以images开头,后面是任意内容的,则重写为/images/任意内容 

例如: 访问http://www.b.org/images/a.jpg 会被重写成http://www.b.org/imgs/a.jpg  

例2:

location /download/ {  root /www/b.org/;  rewrite ^/download/(.*\.(jpg|gif|jpeg|png))$  /images/$1 last;    }

解释:访问/download/下任意以jpg等图片格式结尾的uri时,跳转到/images/路径下对应的文件路径 

PS:图片实际路径是/www/b.org/images/1.jpg

修改www.b.org的配置

location /download {       root /www/b.org;       rewrite ^/download/(.*\.(jpg|gif|jpeg|png))$  /images/$1 last;}

image.png

访问download下的html文件,则不会重写

image.png

6、rewrite_log on | off;

     是否把重写过程记录在错误日志中,默认为notice级别, 该功能默认是关闭的,在繁忙的服务器上这个功能建议关闭

例如:修改

location /download {    root /www/b.org;    rewrite ^/download/(.*\.(jpg|gif|jpeg|png))$  /images/$1 last;    rewrite_log on;        }

开启error_log日志配置:

error_log  /var/log/nginx/error.log  notice;

保存reload nginx配置,再次访问 ,查看/var/log/nginx/error.log日志文件,发现rewrite日志记录到错误日志文件中了

tail /var/log/nginx/error.log 2018/05/14 16:01:53 [notice] 1537#0: *41 "^/download/(.*\.(jpg|gif|jpeg|png))$" does not match "/download/1.jps", client: 172.16.42.1, server: www.b.org, request: "GET /download/1.jps HTTP/1.1", host: "www.b.org"2018/05/14 16:01:53 [error] 1537#0: *41 open() "/www/b.org/download/1.jps" failed (2: No such file or directory), client: 172.16.42.1, server: www.b.org, request: "GET /download/1.jps HTTP/1.1", host: "www.b.org"2018/05/14 16:01:57 [notice] 1537#0: *41 "^/download/(.*\.(jpg|gif|jpeg|png))$" matches "/download/1.jpg", client: 172.16.42.1, server: www.b.org, request: "GET /download/1.jpg HTTP/1.1", host: "www.b.org"2018/05/14 16:01:57 [notice] 1537#0: *41 rewritten data: "/images/1.jpg", args: "", client: 172.16.42.1, server: www.b.org, request: "GET /download/1.jpg HTTP/1.1", host: "www.b.org"2018/05/14 16:01:58 [notice] 1537#0: *41 "^/download/(.*\.(jpg|gif|jpeg|png))$" matches "/download/1.jpg", client: 172.16.42.1, server: www.b.org, request: "GET /download/1.jpg HTTP/1.1", host: "www.b.org"2018/05/14 16:01:58 [notice] 1537#0: *41 rewritten data: "/images/1.jpg", args: "", client: 172.16.42.1, server: www.b.org, request: "GET /download/1.jpg HTTP/1.1", host: "www.b.org"2018/05/14 16:01:59 [notice] 1537#0: *41 "^/download/(.*\.(jpg|gif|jpeg|png))$" matches "/download/1.jpg", client: 172.16.42.1, server: www.b.org, request: "GET /download/1.jpg HTTP/1.1", host: "www.b.org"2018/05/14 16:01:59 [notice] 1537#0: *41 rewritten data: "/images/1.jpg", args: "", client: 172.16.42.1, server: www.b.org, request: "GET /download/1.jpg HTTP/1.1", host: "www.b.org"2018/05/14 16:01:59 [notice] 1537#0: *41 "^/download/(.*\.(jpg|gif|jpeg|png))$" matches "/download/1.jpg", client: 172.16.42.1, server: www.b.org, request: "GET /download/1.jpg HTTP/1.1", host: "www.b.org"2018/05/14 16:01:59 [notice] 1537#0: *41 rewritten data: "/images/1.jpg", args: "", client: 172.16.42.1, server: www.b.org, request: "GET /download/1.jpg HTTP/1.1", host: "www.b.org"

7、return code;

     用于结束rewrite规则,并且为客户返回状态码,可以使用的状态码有204,400,402-406,500-504等

8、防盗链配置

location  ~* \.(jpg|png|gif|jpeg)$ {    root /www/b.org;    valid_referers none blocked www.b.org *.b.org;    if ($invalid_referer) {         rewrite ^/ http://www.b.org/403.html;    }}

9、ssl配置,使用https相关配置

server {    ssl   on;    ssl_certificate           cert.pem;       //证书保存路径    ssl_certificate_key       cert.key;       //私钥保存的路径    ssl_session_timeout       5m;             //会话超时时长5分钟,时间根据实际情况调整    ssl_prefer_server_ciphers on;             //服务器自己选择加密算法}

10、nginx状态页面配置

 location /server-status {            stub_status on;            access_log off;           //不记录日志到访问日志中,防止信息泄露            allow 172.16.42.0/24;     //出于安全考虑,基于IP做访问控制            deny all;        }

image.png

active connection:所有的活动连接

server accepts handled requests:  服务器已经接受或处理过的请求数,

有三个数:第一个116表示nginx已经接收到的请求数

第二个116表示nginx已经处理过的请求数,请求还没有closed

第三个313表示正在处理的连接数

下面三个数当前正在处理的请求:

  • Reading:正在读取客户端请求的请求数

  • Writing:  请求主体已经获取了,准备响应请求

  • Waiting: 保持连接的请求数, Waiting = Active - (Reading + Writing)

11、upstream配置

先看下官方给出example 配置样例

Example Configuration

upstream backend {    server backend1.example.com       weight=5;    server backend2.example.com:8080;    server unix:/tmp/backend3;    server backup1.example.com:8080   backup;    server backup2.example.com:8080   backup;}server {    location / {        proxy_pass http://backend;    }}

参数设置:

  • weight=number 设置服务器的权重,默认为1

  • max_fails=number  设置在fail_timeout 时间内不成功的尝试次数,判断此机器是否可用,默认尝试次数为1

  • fail_timeout=time  设置判断机器是否可用尝试的时间,默认时间为10s

  • backup 标明此机器为备份机器,当主机器不可用的时候起作用。

  • down  标明此机器不可用。

  • max_conns=number 限制代理服务器的最大连接数。默认值为0,也就是没有限制

  • resolve  监听ip地址以及对应的服务器域名的改变,自动修改配置,不用重启nginx.

  • route=string 设置服务器的路由名称

  • slow_start=time  设置服务器权重从0恢复到标准值的时间,默认值为0

upstream配置使用样例:

在nginx本机安装httpd,并修改apache默认欢迎页面监听端口为8080,然后启动httpd服务,然后在nginx中增加以下配置

upstream backend {        server 127.0.0.1:8080;}server {    listen       80;    server_name  www.test.cc;    location / {    proxy_pass http://backend;    root   /www/a.com;    index  index.html index.htm;    }}

访问

image.png