nginx的优化、反向代理及各个模块配置

nginx是什么

Nginx(engine x)是一个网页服务器,它能反向代理HTTP, HTTPS, SMTP, POP3, IMAP的协议链接,以及一个负载均衡器和一个HTTP缓存。
起初主要供俄国大型的门户网站及搜索引擎Rambler使用,因此同样的服务器配置下,nginx会比apache有着更优的性能、更高的并发量。目前各大企业,包括腾讯、京东、淘宝在内均已开始使用nginx作为web服务器。

HTTP基本认证模块

当我们有了一些静态文件或者静态页面,但是又不想使用一些动态脚本来控制他们的的访问权限,毕竟动态脚本会影响到访问速度,这时候便可以仅仅依靠nginx来完成http的基本认证。
需在nginx的配置文件中加入如下配置来达到控制权限的目的,可以指定到某个目录,也可以进行一些正则匹配,也可以直接整个域名控制权限。

1
2
auth_basic "secret";
auth_basic_user_file /path/to/passwd.db;

在这之前,还需设置可登录的用户名及密码,这时候需要用到htpasswd这个工具,另外也可以使用openssl,本文使用htpasswd生成用户名密码文件。

1
htpasswd -c passwd.db yms

然后输入密码,再次确认密码。
执行以下命令平滑重启nginx服务:

1
service nginx reload

登录你的网站,这时候会返回405错误,并且提示你需要输入帐号及密码才可访问。

反向代理

只需要配置好路径,及对应的反向代理路径即可,如下面命令所示:

1
2
3
4
location ^~ /api
{
proxy_pass http://192.168.0.1;
}

nginx解决跨域问题

部分图片可能跨域无法访问,因此需要在图片服务器进行配置,对图片目录增加允许跨域:

1
add_header Access-Control-Allow-Origin *;

nginx负载均衡

1
2
3
4
5
upstream phpserver {
server 192.168.0.77:3000 weight=2;
server 192.168.0.66:80 weight=2;
}
proxy_cache_path /var/cache/nginx/nginx_cache levels=1:2 keys_zone=first:300m inactive=1h max_size=5g;
1
2
3
4
5
6
7
8
9
10
11
12
13
add_header X_Cache "$upstream_cache_status from $server_addr";
location / {
proxy_pass http://phpserver;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
if ($request_method = "POST") {
proxy_pass http://10.10.0.1;
}
if ($request_method = "PUT") {
proxy_pass http://10.10.0.2;
}
}