# Nginx 极简教程
> 本项目是一个 Nginx 极简教程,目的在于帮助新手快速入门 Nginx。
>
> [**examples**](https://github.com/dunwu/nginx-tutorial/tree/master/examples) 目录中的示例模拟了工作中的一些常用实战场景,并且都可以通过脚本一键式启动,让您可以快速看到演示效果。
<!-- TOC depthFrom:2 depthTo:3 -->
- [一、Nginx 简介](#一nginx-简介)
- [二、Nginx 入门](#二nginx-入门)
- [三、Nginx 实战](#三nginx-实战)
- [Http 反向代理](#http-反向代理)
- [Https 反向代理](#https-反向代理)
- [负载均衡](#负载均衡)
- [网站有多个 webapp 的配置](#网站有多个-webapp-的配置)
- [静态站点](#静态站点)
- [搭建文件服务器](#搭建文件服务器)
- [解决跨域](#解决跨域)
- [资源](#资源)
<!-- /TOC -->
## 一、Nginx 简介
**什么是 Nginx?**
**Nginx (engine x)** 是一款轻量级的 Web 服务器 、反向代理服务器及电子邮件(IMAP/POP3)代理服务器。
![img](https://raw.githubusercontent.com/dunwu/images/master/cs/web/nginx/nginx.jpg)
**什么是反向代理?**
反向代理(Reverse Proxy)方式是指以代理服务器来接受 internet 上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给 internet 上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器。
![img](https://raw.githubusercontent.com/dunwu/images/master/cs/web/nginx/reverse-proxy.png)
## 二、Nginx 入门
> 详细安装方法请参考:[Nginx 运维](docs/nginx-ops.md)
nginx 的使用比较简单,就是几条命令。
常用到的命令如下:
```batch
nginx -s stop 快速关闭Nginx,可能不保存相关信息,并迅速终止web服务。
nginx -s quit 平稳关闭Nginx,保存相关信息,有安排的结束web服务。
nginx -s reload 因改变了Nginx相关配置,需要重新加载配置而重载。
nginx -s reopen 重新打开日志文件。
nginx -c filename 为 Nginx 指定一个配置文件,来代替缺省的。
nginx -t 不运行,仅仅测试配置文件。nginx 将检查配置文件的语法的正确性,并尝试打开配置文件中所引用到的文件。
nginx -v 显示 nginx 的版本。
nginx -V 显示 nginx 的版本,编译器版本和配置参数。
```
如果不想每次都敲命令,可以在 nginx 安装目录下新添一个启动批处理文件**startup.bat**,双击即可运行。内容如下:
```batch
@echo off
rem 如果启动前已经启动nginx并记录下pid文件,会kill指定进程
nginx.exe -s stop
rem 测试配置文件语法正确性
nginx.exe -t -c conf/nginx.conf
rem 显示版本信息
nginx.exe -v
rem 按照指定配置去启动nginx
nginx.exe -c conf/nginx.conf
```
如果是运行在 Linux 下,写一个 shell 脚本,大同小异。
## 三、Nginx 实战
我始终认为,各种开发工具的配置还是结合实战来讲述,会让人更易理解。
### Http 反向代理
我们先实现一个小目标:不考虑复杂的配置,仅仅是完成一个 http 反向代理。
`nginx.conf` 配置文件如下:
> **_注:`conf/nginx.conf` 是 nginx 的默认配置文件。你也可以使用 nginx -c 指定你的配置文件_**
```nginx
#运行用户
#user somebody;
#启动进程,通常设置成和cpu的数量相等
worker_processes 1;
#全局错误日志
error_log D:/Tools/nginx-1.10.1/logs/error.log;
error_log D:/Tools/nginx-1.10.1/logs/notice.log notice;
error_log D:/Tools/nginx-1.10.1/logs/info.log info;
#PID文件,记录当前启动的nginx的进程ID
pid D:/Tools/nginx-1.10.1/logs/nginx.pid;
#工作模式及连接数上限
events {
worker_connections 1024; #单个后台worker process进程的最大并发链接数
}
#设定http服务器,利用它的反向代理功能提供负载均衡支持
http {
#设定mime类型(邮件支持类型),类型由mime.types文件定义
include D:/Tools/nginx-1.10.1/conf/mime.types;
default_type application/octet-stream;
#设定日志
log_format main '[$remote_addr] - [$remote_user] [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log D:/Tools/nginx-1.10.1/logs/access.log main;
rewrite_log on;
#sendfile 指令指定 nginx 是否调用 sendfile 函数(zero copy 方式)来输出文件,对于普通应用,
#必须设为 on,如果用来进行下载等应用磁盘IO重负载应用,可设置为 off,以平衡磁盘与网络I/O处理速度,降低系统的uptime.
sendfile on;
#tcp_nopush on;
#连接超时时间
keepalive_timeout 120;
tcp_nodelay on;
#gzip压缩开关
#gzip on;
#设定实际的服务器列表
upstream zp_server1{
server 127.0.0.1:8089;
}
#HTTP服务器
server {
#监听80端口,80端口是知名端口号,用于HTTP协议
listen 80;
#定义使用www.xx.com访问
server_name www.helloworld.com;
#首页
index index.html
#指向webapp的目录
root D:\01_Workspace\Project\github\zp\SpringNotes\spring-security\spring-shiro\src\main\webapp;
#编码格式
charset utf-8;
#代理配置参数
proxy_connect_timeout 180;
proxy_send_timeout 180;
proxy_read_timeout 180;
proxy_set_header Host $host;
proxy_set_header X-Forwarder-For $remote_addr;
#反向代理的路径(和upstream绑定),location 后面设置映射的路径
location / {
proxy_pass http://zp_server1;
}
#静态文件,nginx自己处理
location ~ ^/(images|javascript|js|css|flash|media|static)/ {
root D:\01_Workspace\Project\github\zp\SpringNotes\spring-security\spring-shiro\src\main\webapp\views;
#过期30天,静态文件不怎么更新,过期可以设大一点,如果频繁更新,则可以设置得小一点。
expires 30d;
}
#设定查看Nginx状态的地址
location /NginxStatus {
stub_status on;
access_log on;
auth_basic "NginxStatus";
auth_basic_user_file conf/htpasswd;
}
#禁止访问 .htxxx 文件
location ~ /\.ht {
deny all;
}
#错误处理页面(可选择性配置)
#error_page 404 /404.html;
#error_page 500 502 503 504 /50x.html;
#location = /50x.html {
# root html;
#}
}
}
```
好了,让我们来试试吧:
1. 启动 webapp,注意启动绑定的端口要和 nginx 中的 `upstream` 设置的端口保持一致。
2. 更改 host:在 C:\Windows\System32\drivers\etc 目录下的 host 文件中添加一条 DNS 记录
```
127.0.0.1 www.helloworld.com
```
3. 启动前文中 startup.bat 的命令
4. 在浏览器中访问 www.helloworld.com,不出意外,已经可以访问了。
### Https 反向代理
一些对安全性要求比较高的站点,可能会使用 HTTPS(一种使用 ssl 通信标准的安全 HTTP 协议)。
这里不科普 HTTP 协议和 SSL 标准。但是,使用 nginx 配置 https 需要知道几点:
- HTTPS 的固定端口号是 443,不同于 HTTP 的 80 端口
- SSL 标准需要引入安全证书,所以在 nginx.conf 中你需要指定证书和它对应的 key
其他和 http 反向代理基本一样,只是在 `Server` 部分配置有些不同。
```nginx
#HTTP服务器
server {
#监听443端口。443为知名端口号,主要用于HTTPS协议
listen 443 ssl;
#定义使用www.xx.com访问
server_name www.helloworld.com;
#ssl证书文件位置(常见证书文件格式为:crt/pem)
ssl_certi
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
这是一个专为新手设计的Nginx极简教程,旨在通过直观且实用的示例帮助您迅速掌握Nginx的基础和进阶应用。不论您是希望搭建自己的个人网站,还是需要配置复杂的企业级应用,这个教程都将为您提供一站式的学习路径。 在我们的**examples**目录中,您将找到一系列精选的示例,覆盖了从HTTP反向代理到Https加密服务、从负载均衡到多应用网站配置,再到静态站点和文件服务器的搭建。每一个示例都配备了一键启动脚本,使您能够立即启动并见证Nginx的强大功能。 通过本教程,您将学习到如何: - 利用Nginx实现高效的**反向代理**,优化您的网络服务。 - 配置**Https**来增强网站安全。 - 通过**负载均衡**提高网站的可用性和响应速度。 - 管理包含多个web应用的复杂站点。 - 快速搭建**静态站点**和**文件服务器**,简化文件分享和网站部署。 - 解决烦人的**跨域请求问题**,确保前端和服务器的顺畅通信。 无论您是网站开发新手还是希望扩展技术栈的开发者,这个Nginx教程都将是您不可多得的资源。加入我们,开启您的Nginx学习之旅,轻松应对各种网络场景需求!
资源推荐
资源详情
资源评论
收起资源包目录
nginx通俗易懂的教程 (172个子文件)
.babelrc 456B
demo03-start.bat 1KB
demo02-start.bat 1KB
demo04-start.bat 624B
demo01-start.bat 537B
build-reactadmin.bat 485B
build-reactapp.bat 482B
nginx-start.bat 396B
demo05-start.bat 388B
demo06-start.bat 385B
build-javaapp.bat 287B
nginx-stop.bat 32B
CHANGES 280KB
nginx.conf 4KB
fastcgi.conf 1KB
nginx.conf 917B
demo05.conf 817B
demo03.conf 791B
demo02.conf 724B
demo04.conf 641B
demo01.conf 532B
demo06.conf 503B
App.css 448B
index.css 365B
Nginx.eddx 106KB
.editorconfig 696B
.editorconfig 605B
.eslintrc 2KB
nginx.exe 2.97MB
fastcgi_params 1007B
.gitattributes 870B
.gitattributes 772B
.gitignore 969B
.gitignore 310B
.gitignore 207B
index.html 5KB
index.html 1KB
index.html 668B
index.html 600B
50x.html 523B
favicon.ico 24KB
favicon.ico 4KB
Main.java 4KB
ApiController.java 4KB
CorsFilter.java 4KB
MenuDTO.java 2KB
BaseResponseDTO.java 2KB
HelloController.java 901B
IndexController.java 809B
IOObjectMapper.java 421B
bg.jpg 218KB
http.js 5KB
ajaxCommon.js 5KB
serviceWorker.js 4KB
webpack.config.base.js 3KB
webpack.config.dev.js 3KB
promiseMiddleware.js 2KB
menu.js 2KB
configureStore.dev.js 2KB
reqwestAJAX.js 2KB
webpack.config.prod.js 2KB
menu.js 2KB
index.js 2KB
fetchAJAX.js 1KB
auth.js 1KB
apiCreator.js 991B
commonActionTypes.js 970B
asyncLoadHOC.js 834B
auth.js 706B
index.js 699B
configureStore.prod.js 675B
authActionType.js 606B
App.js 558B
errorUtils.js 553B
configureStore.js 473B
index.js 471B
index.js 423B
menu.js 394B
app.config.js 269B
index.js 222B
App.test.js 217B
menuActionType.js 208B
prettier.config.js 178B
webapi.js 154B
user.js 107B
package.json 2KB
package.json 449B
manifest.json 285B
package.json 157B
package.json 104B
package.json 89B
index.jsp 738B
hello.jsp 500B
Login.jsx 5KB
Sidebar.jsx 4KB
User.jsx 4KB
Header.jsx 3KB
authHOC.jsx 1KB
CoreContainer.jsx 1KB
Breadcrumb.jsx 1KB
共 172 条
- 1
- 2
资源评论
我是瓦力
- 粉丝: 703
- 资源: 5
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功