不论是本地开发,还是远程到 Server 开发,还是给提供 demo 给人看效果,我们时常需要对 Nginx 做配置,Nginx 的配置项相当多,如果考虑性能配置起来会比较麻烦。不过,我们往往只是需要一个静态 Server,或者一个反向代理 Server,这对 Nginx 来说小菜一碟。

本文将给大家介绍 Nginx 配置的基本知识,不想细看的同学可以直接跳到最后一个例子。

简介

Nginx 的安装就不解释了,方便起见,建议在各平台可以直接执行对应安装命令:

# CentOS
yum install nginx;
# Ubuntu
sudo apt-get install nginx;
# Mac
brew install nginx;

一般可以在 /etc/nginx/nginx.conf 中配置,启动参数为:

# 启动
nginx -s start;
# 重新启动,热启动,修改配置重启不影响线上
nginx -s reload;
# 关闭
nginx -s stop;
# 修改配置后,可以通过下面的命令测试是否有语法错误
nginx -t;

-s,signal,意思就是向 nginx 发送 start|reload|stop 命令,还是很好理解的。先看一个最简单的 nginx.conf 配置:

events {
# 需要保留这一个段落,可以为空
}
http {
server {
listen 127.0.0.1:;
location / {
root /home/barret/test/;
}
}
}

启动后,访问 htttp://127.0.0.1:8888 ,如果 /home/barret/test/ 下有 index.html 文件就会展示 index.html 的内容,否则返回 404

Nginx 配置一个 Web 服务器

以下对配置 Web 服务器的参数做简单说明,包括如何配置端口、域名,如何处理请求,如何响应请求。

1、 虚拟主机和请求的分发

域名和端口的配置

listen 127.0.0.1:;
listen *:;
listen localhost:;
# IPV6
listen [::]:;
# other params
listen default_serer ssl;
listen 127.0.0.1 default_server accept_filter=dataready backlog=

主机名配置

server_name www.barretlee.com barretlee.com
server_name *.barretlee.com
server_name ~^\.barret\.com$

URI 匹配

location = / {
# 完全匹配 =
# 大小写敏感 ~
# 忽略大小写 ~*
}
location ^~ /images/ {
# 前半部分匹配 ^~
# 可以使用正则,如:
# location ~* \.(gif|jpg|png)$ { }
}
location / {
# 如果以上都未匹配,会进入这里
}

2、 文件路径的定义

根目录设置

location / {
root /home/barret/test/;
}

别名设置

location /blog {
alias /home/barret/www/blog/;
}
location ~ ^/blog/(\d+)/([\w-]+)$ {
# /blog//article-name
# -> /blog/-article-name.md
alias /home/barret/www/blog/$-$.md;
}

首页设置

index /html/index.html /php/index.php;

重定向页面设置

error_page             /.html;
error_page /50x.html;
error_page = /1x1.gif;
location / {
error_page @fallback;
}
location @fallback {
# 将请求反向代理到上游服务器处理
proxy_pass http://localhost:9000;
}

try_files 设置

try_files $uri $uri.html $uri/index.html @other;
location @other {
# 尝试寻找匹配 uri 的文件,失败了就会转到上游处理
proxy_pass http://localhost:9000;
}
location / {
# 尝试寻找匹配 uri 的文件,没找到直接返回
try_files $uri $uri.html =;
}

Nginx 配置反向代理服务器

反向代理(reserve proxy)方式是指用代理服务器来接受 Internet 上的连接请求,然后将请求转发给内部网络中的上游服务器,并将上游服务器上得到的结果返回给 Internet 上请求连接的客户端,此时代理服务器对外的表现就是一个 Web 服务器。

Nginx 具备超强的高并发高负载能力,一般会作为前端的服务器直接向客户端提供静态文件服务;而业务一般还包含一些业务逻辑需要 Apache、Tomcat 等服务器来处理,故通常 Nginx 对外表现即为静态 Web 服务器也是反向代理服务器。

缺点是增加了一次请求的处理时间,优点是降低了上游服务器的负载,尽量将压力放在 Nginx 服务器上。

1、负载均衡配置

upstream,定义一个上游服务器集群

upstream backend {
# ip_hash;
server s1.barretlee.com;
server s2.barretlee.com;
}
server {
location / {
proxy_pass http://backend;
}
}

2、反向代理

proxy_pass 将请求转发到有处理能力的端上,默认不会转发请求中的 Host 头部

location /blog {
prox_pass http://localhost:9000;
### 下面都是次要关注项
proxy_set_header Host $host;
proxy_method POST;
# 指定不转发的头部字段
proxy_hide_header Cache-Control;
proxy_hide_header Other-Header;
# 指定转发的头部字段
proxy_pass_header Server-IP;
proxy_pass_header Server-Name;
# 是否转发包体
proxy_pass_request_body on | off;
# 是否转发头部
proxy_pass_request_headers on | off;
# 显形/隐形 URI,上游发生重定向时,Nginx 是否同步更改 uri
proxy_redirect on | off;
}

一个简单的例子,Node.js

一个十分常见的需求:处理请求,如果是静态文件,Nginx 直接返回,否则交给 Node 服务器处理。首先创建了一个 Node 服务器:

const http = require('http');
http.createServer((req, res) => {
res.end('hello world');
}).listen();

任何请求过来都返回 hello world,简版的 Nginx 配置如下,

events {
# 这里可不写东西
use epoll;
}
http {
server {
listen 127.0.0.1:;
# 如果请求路径跟文件路径按照如下方式匹配找到了,直接返回
try_files $uri $uri/index.html;
location ~* ^/(js|css|image|font)/$ {
# 静态资源都在 static 文件夹下
root /home/barret/www/static/;
}
location /app {
# Node.js 在 开了一个监听端口
proxy_pass http://127.0.0.1:9000;
}
# 上面处理出错或者未找到的,返回对应状态码文件
error_page /.html;
error_page /50x.html;
}
}

首先 try_files,尝试直接匹配文件;没找到就匹配静态资源;还没找到就交给 Node 处理;否则就返回 4xx/5xx 的状态码。

小结

本文内容为阅读《深入理解 Nginx 模块开发和架构解析》时做的一点笔记,以前配置 Nginx 服务器总是得上网找答案,现在把这些项都理解并记到脑子里了,还是担心忘记,博客稍作记录。

十分建议读者边阅读边动手尝试,利用 nginx -t 测试语法,遇到问题就 Google 搜索下,上手会很快。后续有空会详细介绍 Nginx 运维知识。

本文转自我的个人博客:http://www.barretlee.com/blog/2016/11/19/nginx-configuration-start/

Nginx 配置简述的更多相关文章

  1. nginx配置反向代理或跳转出现400问题处理记录

    午休完上班后,同事说测试站点访问接口出现400 Bad Request  Request Header Or Cookie Too Large提示,心想还好是测试服务器出现问题,影响不大,不过也赶紧上 ...

  2. Windos环境用Nginx配置反向代理和负载均衡

    Windos环境用Nginx配置反向代理和负载均衡 引言:在前后端分离架构下,难免会遇到跨域问题.目前的解决方案大致有JSONP,反向代理,CORS这三种方式.JSONP兼容性良好,最大的缺点是只支持 ...

  3. Windows下Nginx配置SSL实现Https访问(包含证书生成)

    Vincent.李   Windows下Nginx配置SSL实现Https访问(包含证书生成) Windows下Nginx配置SSL实现Https访问(包含证书生成) 首先要说明为什么要实现https ...

  4. Nginx配置详解

    序言 Nginx是lgor Sysoev为俄罗斯访问量第二的rambler.ru站点设计开发的.从2004年发布至今,凭借开源的力量,已经接近成熟与完善. Nginx功能丰富,可作为HTTP服务器,也 ...

  5. Nginx配置Https

    1.申请证书: https://console.qcloud.com/ssl?utm_source=yingyongbao&utm_medium=ssl&utm_campaign=qc ...

  6. nginx配置为windows服务中的坑

    网上搜索“nginx 配置为windows服务”,很容易搜索到使用windows server warpper来配置,于是按照网上的方法我从github上的链接下载了1.17版本,前面都很顺利,很容易 ...

  7. 【nginx配置】nginx做非80端口转发

    一个场景 最近在使用PHP重写一个使用JAVA写的项目,因为需要查看之前的项目,所以要在本地搭建一个Tomcat来跑JAVA的项目.搭建成功后,因为Tomcat监听的端口是8080,因此,访问的URL ...

  8. Apache、nginx配置的网站127.0.0.1可以正常访问,内外网的ip地址无法访问,谁的锅?

    最近做开发,发现一个比较尴尬的问题.因为我是一个web开发者,经常要用到Apache或者nginx等服务器软件,经过我测试发现,只要我打开了adsafe,我便不能通过ip地址访问我本地的网站了,比如我 ...

  9. nginx配置301重定向

    1. 简介 301重定向可以传递权重,相比其他重定向,只有301是最正式的,不会被搜索引擎判断为作弊 2. 栗子 savokiss.com 301到 savokiss.me 3. nginx默认配置方 ...

随机推荐

  1. Linux平台 Oracle 10gR2(10.2.0.5)RAC安装 Part1:准备工作

    Linux平台 Oracle 10gR2(10.2.0.5)RAC安装 Part1:准备工作 环境:OEL 5.7 + Oracle 10.2.0.5 RAC 1.实施前准备工作 1.1 服务器安装操 ...

  2. NoSql数据库使用半年后在设计上面的一些心得

    NoSql数据库这个概念听闻许久了,也陆续看到很多公司和产品都在使用,优缺点似乎都被分析的清清楚楚.但我心里一直存有一个疑惑,它的出现究竟是为了解决什么问题? 这个疑惑非常大,为此我看了很多分析文章, ...

  3. 设置line-height:1.5和line-height:150%或者line-height:150px的区别

    直接正题: 看一下line-height可能的值: 其实可以分为两类: (1)不带单位的(如line-height:1.5),这种是推荐使用的: (2)带单位的(如line-heigth:30px/1 ...

  4. C# 对象实例化 用json保存 泛型类 可以很方便的保存程序设置

    参考页面: http://www.yuanjiaocheng.net/webapi/test-webapi.html http://www.yuanjiaocheng.net/webapi/web-a ...

  5. 用django创建一个项目

    首先你得安装好python和django,然后配置好环境变量,安装python就不说了,从配置环境变量开始 1.配置环境变量 在我的电脑处点击右键,或者打开 控制面板\系统和安全\系统 -> 左 ...

  6. vim的一些常用命令(一)

    先确认在Normal模式下,如不确认,请按几次Esc. :sy on/clear sy表示语法高亮,on是打开.clear是取消. :set go= set表示一般性设置,go是gui option的 ...

  7. date命令

    GNU的date提供+%s(小写s), 能打印出自1970-01-01 00:00:00到当前时间的秒数. 这可能大家都不陌生,但有两点需要注意: 1. %s存在于GNU扩展版本.像在solaris等 ...

  8. maven常见异常以及解决方法

    本文写的是我在整合ssm框架时遇到的一些问题,我估计很多人也会遇到,所以,这里作为一个总结,希望能够帮助大家解决问题 一,加入shiro组件时抛出的异常 加入步骤(略) 问题 1,保存后,无法导入sh ...

  9. centos7+mono4.2.3.4+jexus5.8.1跨平台起飞

    很早之前就开始关注.net跨平台,最近正好测试了下用EF6连接mysql,于是就想直接把网站扔进Linux.查了很多资料,鼓捣了两个晚上,终于成功. 这里我使用的是budgetvm的1G openvz ...

  10. .Net Core 系列:1、环境搭建

    前言: 2016年6月28日微软宣布发布 .NET Core 1.0.ASP.NET Core 1.0 和 Entity Framework Core 1.0. .NET Core是微软在两年前发起的 ...