Nginx基础:简单问题解决与反向代理配置

Nginx基础配置实战
本文介绍了Nginx的基本配置方法,包括解决常见错误、反向代理及虚拟主机配置等。通过实例展示了如何配置Nginx以实现服务的高效转发。

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.logerror.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ù)》,偶有所得,以后会整理记录下来~

这有个二维码,内容不多,正在逐渐的充实,不嫌弃可以扫一下~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值