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.com
172.16.42.180 www.b.org
2、nginx基于IP地址,使用access模块做访问控制
nginx访问控制用deny和allow两个指令来控制,例如修改www.b.org的server配置
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,再次访问www.b.org被拒绝
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 tom
htpasswd -m /etc/nginx/.htpasswd paul
reload下nginx,测试访问www.b.org站点
4、建立下载站点时,使用autoindex模块, 自动列出所有目录和文件
配置方法:在server{}, 配置中加入以下配置:
location /download {
root /www/b.org;
autoindex on;
}
例如:修改www.b.org配置
server {
listen 80 default_server;
server_name www.b.org;
root /www/b.org;
location /download {
root /www/b.org;
autoindex on;
}
}
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;
}
访问download下的html文件,则不会重写
6、rewrite_log on | off;
是否把重写过程记录在错误日志中,默认为notice级别, 该功能默认是关闭的,在繁忙的服务器上这个功能建议关闭
例如:修改www.b.org配置
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配置,再次访问http://b.org/download/1.jpg ,查看/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;
}
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;
}
}
转载于:https://blog.51cto.com/zengestudy/2116102