nginx 虚拟主机配置说明

1、server {}

定义一个虚拟主机;

例:

server{

listen 8080;

root “/vhosts/web1”;

server_name www.magedu.com;

}

2、listen

监听的端口

完整格式 :listen address[:port] [default_server] [ssl] [spdy] [proxy_protocol] [setfib=number] [fastopen=number] [backlog=number] [rcvbuf=size] [sndbuf=size] [accept_filter=filter] [deferred] [bind] [ipv6only=on|off] [so_keepalive=on|off|[keepidle]:[keepintvl]:[keepcnt]];

listen address[:port] [default_server] ssl

backlog=number: 指明TCP协议backlog队列的大小。默认为-1,表示不设置;

rcvbuf=size:设定监听句柄的SO_RCVBUF参数;

例如:

listen 172.16.100.8:8080

3、server_name name […];

后可跟多个主机名;名称还可以使用通配符和正则表达式(~);

(1) 先做精确匹配;www.magedu.com:

(2) 左侧通配符匹配,例如:*.magedu.com;

(3) 右侧通配符匹配,例如:www.*;

(4) 正则表达式匹配,例如: ~^.*\.magedu\.com$

(5) default_server

server{

server_name www.magedu.com

}

server{

server_name *magedu.com

}

server{

server_name mail.*

}

4、location [=|~|~*|^~] /uri {…}

location @name

功能:允许根据用户请求的URI来匹配定义的各location,匹配到时,此请求将被相应的location块中的配置所处理;

=: 精确匹配检查;

~: 正则表达式模式匹配,区分字符大小写;

~*:正则表达式模式 匹配,不区分字符大小写;

^~:URI的前半部分匹配,不检查正则表达式;

匹配优先级:精确匹配(=)、^~、~和~*、由不带符号的URL进行左侧匹配;

server{

listen 80;

server_name www.magedu.com;

location / {

#”/”起始于/vhosts/web1

root “/vhosts/web1”;

}

location /images/ {

#”/”起始于/vhosts/images

root “/vhosts/images”

}

location ~* \.php$ {

fcgipass

#基于fcgipass反向代理

}

}

www.magedu.com/bbs/index.php 匹配到的三个

5、root

设置web资源路径映射;用于指明请求的URL所对应的文档的根目录路径;

location /images/ {

root “/web/imgs/”;

}

6、alias path

用于location配置段,定义路径别名

location /images/ {

alias /www/pictures/;

}

#www.magedu.com/images/a.jpg <– /www/pictuer/a.jpg

location /images/ {

root “/vhosts/web1”;

}

#www.magedu.com/images/a.jpg <– /vhostst/web1/images/a.jpg

location /images/ {

alias /vhosts/web1/;

}

#www.magedu.com/images/a.jpg <– /vhosts/web1/a.jpg

注意:root表示指明路径为对应location的” /” URL;alias表示路径映射,即location中的URL是相对于alias所指明的路径而言;

7、index file

默认主页面

index index.html;

8、error_page code […] [=code] URI | @name

根据http状态码重定向错误页面

error_page 404 /404.html

=[code]: 以指定的响应码进行响应;省略code表示以新资源的响应码为响应码;

9、try_files

try_files path1[,path2,…] URI

10、基于IP访问控制

allow 允许地址/网段

eny 拒绝地址/网段


server {

listen 8080;

server_name www.sungww.com;

location / {

root “/vhosts/web1”;

allow 192.168.0.0/16;

deny all;

}

location /img/ {

alias “/vhosts/img/”;

}

}

#仅放行一个网段访问

#http、server、location都可以IO\P控制

11、基于用户的访问控制

basic,digest;

auth_basic ” ” 说明

auth_basic_user_file ” ” 账号密码文件

账号密码文件建议用htpasswd来创建

htpasswd 需要安装httpd

#htpasswd -c -m /etc/nginx/users/.htpasswd 用户

New password:

Re-type new password:

Adding password for user 用户

#vim nginx.conf


location / {

root “/vhosts/web1”;

auth_basic “Onle for VIP”; #说明

auth_basic_user_file /etc/nginx/users/.htpasswd;

#账号密码文件位置

}

12、https服务

生成私钥,生成证书签署请求,并获得证书;

#cd /etc/pki/CA/

# (umask 077;openssl genrsa -out private/cakey.pem 2048)

#生成一个秘钥对,保存在指定目录下,文件名为cakey.pem(必须是这个名字,因为是配置文件中定义的)

# ls -l private/

#openssl req -new -x509 -key private/cakey.pem -out cacert.pem -days 3655

#创建自签证书

-new:生成新证书签署请求

-x509:专用于CA生成自签证书

-key:生成请求时用到的私钥文件

-days n:证书的有效期限

-out /PATH/TO/SOMECERTFILE:证书的保存路径

要输入国家名、省份名、地区(市)名、组织或公司名、部门名、服务器名、Email地址

# touch serial index.txt

# echo 01 > serial

# cd /etc/nginx/

# mkdir ssl

# cd ssl/

# (umask 077; openssl genrsa -out nginx.key 1024)

# openssl req -new -key nginx.key -out nginx.csr

# openssl ca -in nginx.csr -out nginx.crt -days 3655

server {

listen 443 ssl

servver_name www.magedu.cm;

ssl_certificate /etc/nginx/ssl/nginx.crt;

ssl_certificate_key /etc/nginx/ssl/nginx.key;


location / {

root “/vhosts/web1”;

index index.html index.htm;

}

}

13、stud_status {on|off}; 状态页

只能用于location上下文;

location /status {

stub_status on;

allow 172.16.0.0/16;

deny all;

}

14、rewrite regex replacement flag;

例如:

rewrite ^/images/(.*\.jpg)$ /imgs/$1 break;

#wwwmagedu.com/images/a/b/c/1.jpg –> /imgs/a/b/c/1.jpg

flag:有last,break,redirect,permanet

last:此rewrite规则重写完成后,不再被后面其他rewrite规则进行处理;而是由UserAgent重新对重写后的URL再一次发起请求,并从头开始执行类似过程;

break:一旦此rewrite规则重写完成后,有User Agent对新的URL重新发起请求,且不再会被当前locatrion内的任何rewrite规则所检查;

redirect:以302响应码(临时重定向)返回新的URL

permanent:以301响应码(永久重定向)返回新的URL

15、if

语法:if (condition){…}

应用环境:server,location

confition:

(1)变量名:

变量值为空串,或以”0″开始,则威false;其他的均为true;

(2)以变量为操作数构成的比较表达式

可以用=,!=类似的比较操作符进行测试;

(3)正则表达式的模式匹配操作

~:区分大小写法的模式匹配检查

~*:不区分大小写的模式匹配检查

!~和!~*:对上面两种测试取反

(4)测试;路径为文件可能性:-f,!-f

(5)测试指定路径为目录的可能性:-d,!-d

(6)测试文件的存在性:-e,!-e

(7)检查文件是否有执行权限:-x,!-x

16、防盗链

location ~* \.(jpg|gif|jpeg|png)${

vaild_refere non blocaked www.magedu.com;

#是否合法引用

if ($invalid_referer) {

rewrite ^/ http://www.magedu.com/403.html;

#不匹配invalid_referer为1,引用网址

}

}

    参考资料:

马哥Linux运维教程为本篇文章的主要参考资料

发表评论

邮箱地址不会被公开。 必填项已用*标注