本文为旧博客迁移的文章
一个典型的 Nginx + Httpd 应用方案可以是Nginx 占用 80 端口,过滤静态请求,然后动态请求即 Proxy 到 Apache 的 8080 端口或其他。Proxy 反向代理的好处是访问的时候,始终就是 80 端口,来访者不会觉察到有任何的区别。
nginx 适合做静态,简单,效率高
apache 适合做动态,稳定,功能强
以下是某次对位置服务器探索与分析,在首次进入服务器后探索服务器架构,如nginx、httpd安装路径以及修改相应的配置文件。
1、通过进入/alidata/server目录,可以看到
1 |
|
易知服务器同时安装了nginx
和httpd
2、通过netstat -tunlp
发现,nginx
占用80端口,Http
占用8088端口。
通过访问IP:80
,无反应,推测Nginx
作为前端代理服务器,httpd
作为后端服务器。
1 |
|
3、通过ps -ef | grep nginx
命令,找到nginx
的运行位置(aux | grep nginx
同理)
1 |
|
4、通过上面找到的路径,通过 /alidata/server/nginx/sbin/nginx -t
命令找到nginx.conf
路径
1 |
|
5、通过对nginx
的配置文件/alidata/server/nginx/conf/nginx.conf
分析,相应的vhosh
是通过以下语句加载include /alidata/server/nginx/conf/vhosts/*.conf;
:
1 |
|
6、通过查看vhosh
目录,发现服务器内存在3个文件:
1 |
|
7、分别查看三个配置文件:
1 |
|
命令讲解:【来源:初识nginx——配置解析篇】
location
location会尝试根据用户请求中的URI来匹配设置的表达式 并选中最终结果中的配置来处理用户的请求
- location [=||*|^~|@] / uri / { … }
- =表示把uri作为字符串,与参数中的URI作完全匹配
- ~进行正则表达式匹配的时候,区分大小写
- ~*进行正则表达式匹配的时候,不区分大小写
- ^~表示匹配URI的时候,如果该location是最佳匹配,那么对于匹配这个location的字符串不在进行正则表达式的匹配检测
- @表示仅用于nginx服务内部请求之间的重定向,带有@的location不直接处理用户请求
匹配的优先级如下:
- 如果查询精确的命中了一个使用=前缀的location,那个它将被使用,并结束匹配
- 在剩下普通字符串中,将按照最大前缀匹配的原则进行匹配,将结果最后候选结果,如果最终命中的结果使用了^~前缀表示或者它是一个完全匹配,那么它将被使用,并结束匹配
- 正则表达式匹配时,按照正则表达式在配置文件中出现的顺序,并且只有匹配到了一条正则local,就不在匹配下面的local了
- 如果步骤3命中了一个匹配,那个它将被使用,否则将使用步骤2的候选结果
- (普通字符串和正则字符串的区别 和*前缀表示location是正则字符串,其他前缀和无前缀表示location是普通字符串)
try_files
try_files:【来源:nginx中的try_files指令解释】
1 |
|
按顺序检查文件是否存在,返回第一个找到的文件。结尾的斜线表示为文件夹 $uri/
。如果所有的文件都找不到,会进行一个内部重定向到最后一个参数。
务必确认只有最后一个参数可以引起一个内部重定向,之前的参数只设置内部URI的指向。 最后一个参数是回退URI且必须存在,否则将会出现内部500错误。
命名的location也可以使用在最后一个参数中。与rewrite指令不同,如果回退URI不是命名的location那么$args
不会自动保留,如果你想保留$args
,必须明确声明。
Nginx配置指令try_files:不存在就去查找location @qwe
的值
internal:【来源:Nginx配置文件详细说明】【参考:Nginx模块参考手册:HTTP核心模块】
设定某个location路径只能在内部使用,不能用于外部,外部的调用请求会返回”Not found” (404)
proxy_pass:【参考:Nginx配置proxy_pass的/路径问题】
反向代理到http://127.0.0.1:8088
expires:【参考:nginx配置静态文件expires时间与cache-control】
设置静态文件过期时间
access_log:【用法:nginx日志配置】
nginx有一个非常灵活的日志记录模式。每个级别的配置可以有各自独立的访问日志。
日志格式通过log_format命令来定义。ngx_http_log_module是用来定义请求日志格式的。
8、分析得出,当打开网站的时候,首先由nginx路由。对于路径不存在的文件、*.php文件就转发到httpd处理。对于静态的文件,就由nginx处理,并且做缓存。
9、接下来打开httpd.conf
1 |
|
- 通过搜索
<Directory "/alidata/www">
就可以看到相关配置了, - 通过搜索
Include
可以看到Include conf/extra/httpd-vhosts.conf
10、查看conf/extra/httpd-vhosts.conf
文件
1 |
|
里面存在引入vhosts
目录下所有.conf
后缀的文件
1 |
|
11、通过ls /alidata/server/httpd/conf/vhosts/
命令查看目录下所有文件,
通过vi
、vim
、tail
等工具查看全部文件的内容
1 |
|
12、得到最终的httpd
配置文件
1 |
|