基于 nginx 的一些笔记
记录下平常配置nginx的一些小笔记
nginx做proxy的正则表达配置
nginx 安装完成以后,删除默认的 website,进入 /etc/nginx/sites-enabled 目录下面,创建 proxy.conf 文件 内容如下
server {
# web admin
listen 8080 ;
server_name ~^user(.+)?\.host1\.flowme\.net$;
access_log /var/log/nginx/admin.access.log;
proxy_set_header Host user$1.host1.flowme.net:8080;
location / {
proxy_pass http://192.168.1.$1:8080 ;
}
}
以上表示基于端口的虚拟主机,监听 8080端口,对于请求的主机名,符合正则的表达式,则到 location / 目录下面请求。并把请求的 header 信息发送到被代理的主机上
eg: 客户请求地址 user1.host1.flowme.net 则把请求发送到 192.168.1.1 这个机器上,如果请求 user45.host1.flowme.net 则把请求发送到 192.168.1.45
跳转
以下的配置是使用如何跳转
当用户访问一个地址的时候,可以把这个地址跳转到另外一个地址上
server {
listen 80 ;
server_name localhost;
access_log /var/log/nginx/access.log;
rewrite ^/(.*)$ https://www.unxmail.com/$1 permanent;
}
配置ssl
输入如下命令
cd /etc/nginx
mkdir ssl
cd ssl
openssl genrsa -des3 -out server.key 1024
openssl req -new -key server.key -out server.csr
cp server.key server.key.org
openssl rsa -in server.key.org -out server.key
openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt
生成好证书以后,在nginx的配置文件里面添加如下字段
server {
server_name YOUR_DOMAINNAME_HERE;
listen 443;
ssl on;
ssl_certificate /etc/nginx/ssl/server.crt;
ssl_certificate_key /etc/nginx/ssl/server.key;
}
做正向代理
伪装user-agent等,都可以在这里设置
server {
listen 80;
resolver 8.8.8.8;
location / {
set $agent "Mozilla/5.0 (iPad; U; CPU OS 4_3_3 like Mac OS X; en-us) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8J2 Safari/6533.18.5";
proxy_pass $scheme://$host$request_uri;
proxy_set_header Host $http_host;
proxy_set_header Connection '';
proxy_set_header Proxy-Connection '' ;
proxy_set_header Accept-Charset '';
proxy_set_header Accept-Encoding '';
proxy_set_header Accept-Language '';
proxy_set_header Accept '';
proxy_set_header Pragma 'no-cache';
proxy_set_header Cache-Control 'no-cache';
#proxy_set_header If-Modified-Since '';
proxy_buffers 256 4k;
proxy_max_temp_file_size 0k;
proxy_set_header User-Agent $agent;
}
}
设置目录或者网站的认证
首先生成密码文件 用apache的htpasswd来创建密码。site_pass为密码文件 格式为:
htpasswd -b -c site_pass username password
例如:基于整个网站的认证,auth_basic在php解释之前。
server {
listen 80;
server_name www.akii.org akii.org;
root /www/akii;
index index.html index.htm index.php;
auth_basic "input you user name and password";
auth_basic_user_file /usr/local/nginx/conf/vhost/nginx_passwd;
location ~ .php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fastcgi_params;
}
location ~ /\.ht {
deny all;
}
access_log /logs/akii.org_access.log main;
}
针对目录的认证
在一个单独的location中,并且在该location中嵌套一个解释php的location,否则php文件不会执行并且会被下载。auth_basic在嵌套的location之后。
server {
listen 80;
server_name www.akii.org akii.org;
root /www/akii;
index index.html index.htm index.php;
location ~ ^/admin/.* {
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fastcgi_params;
}
auth_basic "auth";
auth_basic_user_file /usr/local/nginx/conf/vhost/auth/admin.pass;
}
location ~ .php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fastcgi_params;
}
location ~ /\.ht {
deny all;
}
access_log /logs/akii.org_access.log main;
}
这里有一个细节,就是 location ~ ^/admin/.* {…} 保护admin目录下的所有文件。
如果你只设了/admin/ 那么直接输入 /admin/index.php 还是可以访问并且运行的。 ^/admin/.* 意为保护该目录下所有文件。当然,只需要一次认证。并不会每次请求或每请求一个文件都要认证一下。
转载于:https://blog.51cto.com/fccwcom/1175197