配置出错
1 | 重启nginx |
upstream与ip_hash
1 | # upstream 负载均衡 |
Ip_hash机制缺陷:
- ip_hash要求nginx一定是最前端的服务器,否则nginx得不到正确ip,就不能根据ip作hash. Eg: 使用的是squid为最前端.那么nginx取ip时只能得到squid的服务器ip地址,用这个地址来作分流肯定是错乱的
- 假如nginx后端还有其它负载均衡,将请求又通过另外的方式分流了,那么某个客户端的请求肯定不能定位到同一台session应用服务器上,这么算起来,nginx后端只能直接指向应用服务器,或者再搭一人squid,然后指向应用服务器. 最好 的办法是用location作一次分流,将需要session的部分请求通过ip_hash分流,剩下的走其它后端去.
root 和 alias 配置区别
root与alias主要区别在于nginx如何解释location后面的uri
,这会使两者分别以不同的方式将请求映射到服务器文件上。
1 | location ~ ^/weblogs/ { |
如果一个请求的URI是/weblogs/httplogs/www.ttlsa.com-access.log时,web服务器将会返回服务器上的/data/weblogs/www.ttlsa.com/weblogs/httplogs/www.ttlsa.com-access.log的文件。
root会根据完整的URI请求来映射,也就是/path/uri
。
因此,前面的请求映射为path/weblogs/httplogs/www.ttlsa.com-access.log。
1 | location ^~ /binapp/ { |
alias会把location后面配置的路径丢弃掉,把当前匹配到的目录指向到指定的目录。如果一个请求的URI是/binapp/a.ttlsa.com/favicon时,web服务器将会返回服务器上的/data/statics/bin/apps/a.ttlsa.com/favicon.jgp的文件。
[warning]
- 使用alias时,目录名后面一定要加”/“。
- alias可以指定任何名称。
- alias在使用正则匹配时,必须捕捉要匹配的内容并在指定的内容处使用。
- alias只能位于location块中。
一般情况下,在location /中配置root,在location /other中配置alias。
常规示例
1 | server { |
nginx用户认证配置
ngx_http_auth_basic_module
模块实现让只有输入正确的用户密码才允许访问web内容。默认nginx已安装该模块
修改nginx配置
在server下添加下面两行
server {
auth_basic “Please input password”; #这个是提示信息
auth_basic_user_file /opt/doc/htpasswd;
}
/opt/doc/htpasswd 文件是配置的用户名与密码,是通过htpasswd软件生成
生成授权用户文件
1 | 安装httpd |
重启nginx
nginx配置报错:server directive is not allowed here in /usr/local/nginx/conf/nginx.conf
最终看了nginx.conf配置后,问题原因是:新配置应该放在/etc/nginx/conf.d目录(conf.d是默认目录,具体是哪个目录请根据server配置块之外的include文件位置来确定)。
在/etc/nginx/nginx.conf文件里:
include /etc/nginx/default.d/*.conf这一行配置已经是在server配置块里了,不能再嵌套一层server了。