nginx配置
多台虚拟主机:
1.分配IP地址
2.新建、编写usr/local/nginx的conf配置文件
1 | http{ |
3.编写目录下的首页index.html文件
4.运行nginx
usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/xnzj.conf
▲在根目录下可以直接通过路径访问,如根目录下只有index文件,而配置中设置的是index index.html
此时没有找到index.html后就会显示403错误,但是可以通过192.168.1.17
==>192.168.1.17/index
添加路径的方法来加载index界面
其他配置
- 缓存
1 | server{ |
- 自动列目录
1 | [/ect/nginx/nginx.conf] |
命令解释
server_name
server_name 为虚拟服务器的识别路径。因此不同的域名会通过将请求头中的HOST字段与虚拟主机设置的URI进行匹配,从而匹配到特定的server块,将请求转发到对应的应用服务器中去。
from : https://blog.csdn.net/Cheng_Kohui/article/details/82930464
server_name与host匹配优先级如下:
- 完全匹配
- 通配符在前的,如
*.test.com
- 通配符
*
在后的,如www.test.* - 正则匹配,如~^.www.test.com$
location
location
是Nginx中的块级指令(block directive),,location指令的功能是用来匹配不同的url请求,进而对请求做开始之前先明确一些约定,我们输入的网址叫做
请求URI
,nginx用请求URI
与location中配置的URI
做匹配。不同的处理和响应。
匹配顺序
- = 表示精确匹配。只有请求的url路径与后面的字符串完全相等时,才会命中。
- ^~ 表示如果该符号后面的字符是最佳匹配,采用该规则,不再进行后续的查找。
- ~ 表示该规则是使用正则定义的,区分大小写。
- ~* 表示该规则是使用正则定义的,不区分大小写。
注意的是,nginx的匹配优先顺序按照上面的顺序进行优先匹配,而且注意的是一旦某一个匹配命中直接退出,不再进行往下的匹配
剩下的普通匹配会按照最长匹配长度优先级来匹配,就是谁匹配的越多就用谁。
try_files详解
nginx中http_core核心模块所带的指令,主要是能替代一些rewrite的指令,提高解析效率
格式1:
try_files file ... uri
; 格式2:try_files file ... file = ReturnCode
;
- 关键点1:按指定的file顺序查找存在的文件,并使用第一个找到的文件进行请求处理
- 关键点2:查找路径是按照给定的root或alias为根路径来查找的
- 关键点3:如果给出的file都没有匹配到,则重新请求最后一个参数给定的uri,就是新的location匹配
- 关键点4:如果是格式2,如果最后一个参数是 = 404,若给出的file都没有匹配到,则最后返回ReturnCode(如404)的响应码
举例说明
1 | location /images/ { |
from: https://www.cnblogs.com/jedi1995/p/10900224.html
例子2: 因为不可能每一个项目开启一个域名,仅仅指向通过增加路径来划分多个网站,比如:
www.taobao.com/tmall/login
访问天猫的登录页面www.taobao.com/alipay/login
访问支付宝的登录页面
1 | server { |
rewrite 用法
用rewrite去除URL中的特定参数。
日常服务中经常会用Nginx做一层代理转发,把Nginx当做前置机,这里的rewrite 就是为了去除URL中的
/apis
,因为实际的后端api中是没有这个参数的,但是为了做到在Nginx转发请求,前端需要加上这个参数,以便于区别开请求前端页面还是后端接口
1 | server { |
比如前端的请求地址是
1 | http://192.168.10.231/apis/user |
那么实际上经过Nginx转发后请求的地址是
1 | http://127.0.0.1:8000/user |
index配置
在前后端分离的基础上,通过Nginx配置,指定网站初始页。
格式:
index index.htm ... file3 /index.html
如果包括多个文件,Nginx会根据文件的枚举顺序来检查,直到查找的文件存在;
文件可以是相对路径也可以是绝对路径,绝对路径需要放在最后;
文件可以使用变量$
来命名;index index.$geo.html index.0.html /index.html;
如果文件存在,则使用文件作为路径,发起内部重定向。直观上看上去就像再一次从客户端发起请求,Nginx再一次搜索location一样。
既然是内部重定向,域名+端口不发生变化,所以只会在同一个server下搜索。
同样,如果内部重定向发生在proxy_pass反向代理后,那么重定向只会发生在代理配置中的同一个server。
实例
1 | server { |
上面的例子中,如果你使用example.org或www.example.org直接发起请求,那么首先会访问到“/”的location,结合root与index指令,会先判断/data/www/index.html是否存在,如果不,则接着查看
/data/www/index.php ,如果存在,则使用/index.php发起内部重定向,就像从客户端再一次发起请求一样,Nginx会再一次搜索location,毫无疑问匹配到第二个~ .php$,从而访问到/data/www/test/index.php。
More:
uwsgi模块使用
安装
source activate
# 开启虚拟开发环境模式
pip install uwsgi
# 安装uwsgi
配置
uwsgi配置文件支持很多格式,我采用.ini格式,命名为uconfig.ini具体内容如下:
启动uwsgi , 命令输入uwsgi uconfig.ini
外部访问测试
此时在外部访问 公网IP:5000就可以访问了
1 | [uwsgi] |
1 | location / { |
这段配置表明Nginx会将收到的所有请求都转发到”127.0.0.1:3031″端口上,即uWSGI服务器上。现在让我们重启Nginx,
附:使用记录
单server基本配置
1 | server{ |
反向代理:
1 | upstream group1{ |
Author: Mrli
Link: https://nymrli.top/2019/01/24/学习nginx配置/
Copyright: All articles in this blog are licensed under CC BY-NC-SA 3.0 unless stating additionally.