安装
输入如下命令安装:
1 | # Ubuntu 16.04 LTS |
安装完毕后配置文件在/etc/nginx/
目录下。
开机自动启动
开机启动在/etc/rc.local
文件中添加nginx命令即可。
常用命令
启动停止Nginx:
1 | # 查看Nginx的安装目录,一般在(/usr/local/nginx)下 |
在修改配置文件后,可以输入如下命令检查配置文件的正确性:
1 | /usr/local/nginx/sbin/nginx -t |
其中参数t表示测试配置文件,并退出,命令的结果为:
1 | nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok |
修改后使配置文件生效可以重启Nginx,不过更加方便的是重载Nginx:
1 | sudo nginx -s reload |
也可以输入如下命令查看Nginx帮助:
1 | /usr/local/nginx/sbin/nginx -h |
rewrite
1 | location /main { |
以上rewrite正則表達式表示,/後不緊接js或css字符的url鏈接。
location
每个 url 请求都会对应的一个服务,nginx 进行处理转发或者是本地的一个文件路径,或者是其他服务器的一个服务路径。而这个路径的匹配是通过 location 来进行的。我们可以将 server 当做对应一个域名进行的配置,而 location 是在一个域名下对更精细的路径进行配置。
1 | location /api{ |
将前缀为api的请求发送到地址:http://dn5:28080
。如下配置,指定项目根目录的默认首页为index.html
,如果不指定默认首页,那么就需要在URL中明确指定首页。
1 | location / { |
负载均衡(Load Balance)
Nginx除了作为常规的Web服务器外,还会被大规模的用于反向代理前端,因为Nginx的异步框架可以处理很大的并发请求,把这些并发请求hold住之后就可以分发给后台服务端(backend servers,也叫做服务池, 后面简称backend)来做复杂的计算、处理和响应,这种模式的好处是相当多的:隐藏业务主机更安全,节约了公网IP地址,并且在业务量增加的时候可以方便地扩容后台服务器。
负载均衡算法
会话一致性
后台服务端的动态配置
基于DNS的负载均衡
常见问题
403 Forbidden
有时候当Nginx读取本地目录时会收到403错误,权限问题。先来了解一下Nginx的用户管理,Nginx在以Linux service脚本启动时,通过start-stop-domain启动,会以root权限运行daemon进程。然后daemon进程读取/etc/nginx/nginx.conf
文件中的user配置选项,默认这里的user=nginx。也就是用nginx用户启动worker process。403错误就是因为nginx用户没有权限访问我当前开发用的用户目录,/home/dean/work/resources
。解决方法是将user=nginx替换成root,然后重新启动nginx,可以了。
the HTTP rewrite module requires the PCRE library
Nginx的Url rewrite模块依赖PCRE(Perl Compatible Regular Expressionss),The PCRE library is a set of functions that implement regular expression pattern matching using the same syntax and semantics as Perl 5. PCRE has its own native API, as well as a set of wrapper functions that correspond to the POSIX regular expression API. The PCRE library is free, even for building proprietary software.在安装时提示 the HTTP rewrite module requires the PCRE library:
1 | ./configure: error: the HTTP rewrite module requires the PCRE library. |
安装pcre-devel与openssl-devel解决问题:
1 | sudo yum -y install pcre-devel openssl openssl-devel |
error while loading shared libraries: libpcre.so.0: cannot open shared object file: No such file or directory
在使用命令nginx -s reload
刷新时提示错误:
1 | error while loading shared libraries: libpcre.so.0: cannot open shared object file: No such file or directory |
执行命令:
1 | ldd which /usr/local/nginx/sbin/nginx |
ldd命令用于打印程序或者库文件所依赖的共享库列表(print shared library dependencies)。比如需要看ls命令依賴哪些庫,可以輸入命令ldd /bin/ls
,注意需要是全路徑。提示如下:
1 | nginx: |
原因可能是操作系统升级到了CentOS 7.3版本,没有对应的模块libpcre.so.0,只有对应的模块libpcre.so.1。使用如下命令可以快速解决问题:
1 | ln的功能是为某一个文件在另外一个位置建立一个同步的链接.当我们需要在不同的目录,用到相同的文件时,我们不需要在每一个需要的目录下都放一个必须相同的文件,我们只要在某个固定的目录,放上该文件,然后在 其它的目录下用ln命令链接(link)它就可以,不必重复的占用磁盘空间。這裏是將/lib64/libpcre.so.0鏈接到/lib64/libpcre.so.1,當程序訪問/lib64/libpcre.so.0時,自動訪問/lib64/libpcre.so.1 |
ERR_INCOMPLETE_CHUNKED_ENCODING
进入nginx日志查看:
1 | 2017/04/07 18:31:20 [crit] 7928#0: *33 open() "/home/app/local/tengine/proxy_temp/7/00/0000000007" failed (13: Permission denied) while reading upstream, client: 2.1.27.53, server: , request: "GET /pubapi/global/homePage HTTP/1.1", upstream: "http://192.168.1.2:28080/pubapi/global/homePage", host: "192.168.1.2", referrer: "http://192.168.1.2/" |
原来是nginx没有目录/home/app/local/tengine/proxy_temp
权限导致此问题。在配置文件中修改:
1 | user为/home/app/local/tengine/proxy_temp目录的属主 |
参考资料: