Nginx基础学习
Nginx是由我们北方的“巨熊”邻居,俄罗斯的Rambler.ru网站开发并开源的一块代理服务器,Nginx (engine x) 是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP服务器。
Nginx一经推出,就受到了全世界的软件开发者/组织/公司的欢迎,其中阿里巴巴的技术团队从12年开始进行《Nginx从入门到精通》一书的编写工作,直到13年完成并出版。
nginx由于出色的性能,在世界范围内受到了越来越多人的关注,在淘宝内部它更是被广泛的使用,众多的开发以及运维同学都迫切的想要了解nginx模块的开发以及它的内部原理,但是国内却没有一本关于这方面的书,源于此我们决定自己来写一本。 ——阿里巴巴技术团队
当然了,这篇文档只是一些基础知识,和工作中碰到的一些问题的总结,不求多人关注,只求查漏补缺。
(PS:添加以上内容,只是为了博客看起来好看一点而已)
初学Nginx 最常见的两个错误以及解决方案
在nginx的安装目录下 **\nginx-1.9.12\logs
中,有两个日志文件 access.log
与 error.log
,分别为正常工作的日志文件和错误日志文件,从日志文件中,可以有效的找出错误原因并制定解决方案。
初学nginx最先碰到的问题是十八九是在启动时,nginx报10031错误
PS D:\***\nginx-1.9.12> .\nginx.exe
nginx: [emerg] bind() to 0.0.0.0:8080 failed (10013: An attempt was made to access a socket in a way forbidden by its access permissions)
提示十分明显:监听端口被占用
我这里端口被占用的原因是,我的Tomcat启动占用了8080端口
需要注意的是,本地开发中,一般我们在设置监听端口时,要考虑到其他端口(一):本地服务端口,即Tomcat的8080,或者SqlServer的1311,mySql的3306等等…(二):要被代理的服务端口,(我这里要使用的是服务商提供的开放API 114.***.***.**1.8001
),那么我们在配置监听端口时就要绕过被占用的端口。
还有就是下面的这种错误
1113: No mapping for the Unicode character exists in the target multi-byte code page
这完全就是自己作死了,看看自己Nginx的安装路径是不是有中文?
还有其他的错误以及解决方案,这里放一个博客地址
http://blog.51cto.com/nanchunle/1657410
反向代理配置
基础代理配置
通过安装目录下 **\nginx-1.9.12\conf\nginx.conf
文件,我们可以通过修改配置文件来进行反向代理配置 ,我要代理的是一个开放Api
server {
listen 8022;
server_name 127.0.0.1;
location / {
proxy_pass http://1**.***.***.**1:8002;
proxy_redirect default;
proxy_set_header Host $host;
}
}
然后我们启动 nginx start nginx
在我们访问本地的8022端口之后,nginx帮助将信息转发至”被代理服务器”,并返回给我们想要的结果
虚拟主机配置
我这有个简答配置的虚拟主机,先看看目录结构
目录: D:\nginx-1.9.12\nginx-1.9.12
Mode LastWriteTime Length Name
---- ------------- ------ ----
d----- 2017/12/12 9:23 conf
d----- 2017/2/21 9:53 conf_sites
d----- 2017/2/16 10:32 contrib
d----- 2017/2/16 10:32 docs
d----- 2017/2/16 10:32 html
d----- 2017/12/11 18:43 logs
d----- 2017/2/16 11:01 temp
-a---- 2016/2/24 17:03 2913792 nginx.exe
-a---- 2017/12/6 15:46 613 readme.txt
其中,conf是基础配置文件nginx.conf
所在的文件夹,conf_sites
是我配置虚拟主机的配置文件所在的文件夹,至于为什么叫这个名字,我们往下看
http {
...
#设定虚拟主机
include ./conf_sites/*.conf;
}
我们需要在 nginx.conf
中引入虚拟主机配置文件,下面对虚拟主机来进行配置
# 被代理的本地服务
upstream default_server {
server 127.0.0.1:8080 weight=1 max_fails=3 fail_timeout=20;
}
# 被代理的外部接口服务
upstream api_server {
server 1**.***.***.*11:8002 weight=1 max_fails=3 fail_timeout=20;
}
server {
listen 8021; # 监听接口
server_name 127.0.0.1;
location / {
proxy_pass http://default_server; # 转发到本地
proxy_set_header Host $host:$server_port;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
# 如果监听接口后缀带有 `Api` 或者 `Api.***` 就代理到外部服务
location ~(^\/Api)(.*?) {
proxy_pass http://api_server; # 转发到外部服务器
proxy_set_header Host $host:$server_port;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
如此,我们就完成了一个虚拟主机的简单配置。
这个项目中,我们对外默认开放 8021 端口。在服务接口调用的时候,如果带有 Api
或者 Api.***
的接口,Nginx会自动代理到外部服务,进行请求和返回;而在调用其他接口时,nginx 会代理到本地服务进行接口调用。
在请求的Response Headers 中,我们可以清晰的看到:
嗯,我们的服务采用了nginx~
小结
Nginx的基础配置就先写到这里,这些只是最基础的应用,是Nginx技术栈的九牛一毛。
最近在看《Nginx从入门到精(pǎo)通(lù)》,偶有所得,以后会整理记录下来~
这有个二维码,内容不多,正在逐渐的充实,不嫌弃可以扫一下~