入门教程



## 设置静态网页编码 --> 针对非类Unix系统



  • 针对服务器

http {
...
charset UTF-8;
...
include /etc/nginx/conf.d/*.conf;
}
  • 针对location

server {
listen 80;
server_name _; location / {
charset UTF-8;
}
}

## 使 Nginx 自动识别常规文件 mime 类型 conf/mime.types



Nginx 可以根据文件后缀判断 MIME 类型, 避免造成尴尬, 这就是通过包含 mime.types 文件实现的:

include mime.types; # 包含文件 MIME 信息数据库, 实现自动判断
default_type text/html; # 默认 MIME 类型

mime.types 长这个样子:

types {
text/html html htm shtml;
text/css css;
text/xml xml;
image/gif gif;
image/jpeg jpeg jpg;
application/javascript js;
application/atom+xml atom;
application/rss+xml rss; text/mathml mml;
text/plain txt;
text/vnd.sun.j2me.app-descriptor jad;
text/vnd.wap.wml wml;
text/x-component htc; image/png png;
image/svg+xml svg svgz;
image/tiff tif tiff;
image/vnd.wap.wbmp wbmp;
image/webp webp;
image/x-icon ico;
image/x-jng jng;
image/x-ms-bmp bmp; application/font-woff woff;
application/java-archive jar war ear;
application/json json;
application/mac-binhex40 hqx;
application/msword doc;
application/pdf pdf;

## 反向代理 proxy_pass , 负载均衡 upstream , 保留请求头 proxy_set_header



upstream这个模块提供一个简单方法来实现在轮询和客户端IP之间的后端服务器负荷平衡。
upstream abc.com {
server 127.0.0.1:8080;
server 127.0.0.1:80;
server 127.0.0.1:8000;
} server {
listen 80;
server_name www.test.com;
location / {
proxy_pass http://abc.com;
proxy_set_header Host $host;#保留代理之前的host
proxy_set_header X-Real-IP $remote_addr;#保留代理之前的真实客户端ip, 如果使用了CDN产品, 则是CDN节点IP
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header HTTP_X_FORWARDED_FOR $remote_addr;#在多级代理的情况下,记录每次代理之前的客户端真实ip
proxy_redirect default;#指定修改被代理服务器返回的响应头中的location头域跟refresh头域数值
}
}
  • $host

nginx反向代理tomcat

proxy_pass http://localhost:8002;

如果不设置header, 那么tomcat收到的请求Host就是



proxy_set_header Host $host - #保留代理之前的host

  • $remote_addr

指连接nginx的客户端IP, 有可能是CDN节点IP, 而不是访问者IP.

对于CDN, 行业标准规定x-forwarded-for填充转发IP, X-Forwarded-For是一个完善的HTTP头,代理使用它包括Cloudflare来传递请求中的其他IP地址。这通常与CF-Connecting-IP相同,但请求路径中可能有多层代理。

有两种可能的结果:

首先,如果发送到Cloudflare的请求中没有现有的“X-Forwarded-For”标头,那么标头将与CF-Connecting-IP标头具有相同的值,如下所示:

“X-Forwarded-For:ABCD”

其中ABCD是客户端的IP地址,也称为原始访客IP地址。

其次,如果发送到Cloudflare的请求中存在“X-Forwarded-For”标头,Cloudflare会将HTTP代理的IP地址附加到其值,作为列表中的最后一个。

“X-Forwarded-For:ABCD [,XXXX,YYYY,]”

其中ABCD是客户端的IP地址,也称为原始访客IP地址。此示例中的XXXX和YYYY是标头值中沿路由的IP地址。

CloudFlare还提供了一个cf-connecting-ip专门记录访客IP.如果您对实际的客户端(访问者)IP地址感兴趣,我们建议您依靠CF-Connecting-IP(或True-Client-IP)而不是X-Forwarded-For。

更多CF相关头请查看How does Cloudflare handle HTTP Request headers?

如果不通过head提供转发IP, tomcat就很难知道访问者IP了, request.getRemoteAddr()返回的都是本地回环地址.

  • 实例: 反代Google

server {
# 虚拟机, 反代google
listen 80;
listen [::]:80;
server_name g.deve.cf google.deve.cf; location / {
proxy_pass https://www.google.com/;
}
}
server {
listen 80;
listen [::]:80;
server_name deve.cf g.deve.cf google.deve.cf; location = / {
return 500;
} location = /google/ {
proxy_pass https://www.google.com/;
} location / {
proxy_pass https://www.google.com/;
}
}
  • 实例: 反代tomcat子项目

    server {
listen 80;
server_name l; #rewrite / /git.io/; # location / {
proxy_pass http://localhost:8080/git.io/;
} location /testA {
proxy_pass http://l/testB;
}
}

## [URL重写](https://www.cnblogs.com/develon/p/10778572.html)



重写URL是 Nginx 的重要功能之一, 用于配置基于 location 的虚拟机, 伪静态等, 涉及到正则表达式, 重定向等复杂内容, 重新开一个随笔来研究:

## Nginx 拦截代理错误 proxy_intercept_errors



使用nginx作为前端代理, 若不做特殊处理,当访问出现404时,将会返回tomcat的404页面,现要求拦截错误

使用proxy_intercept_errors on开启拦截代理错误后, 可使用error_page在代理 location 中拦截有关的错误状态, 并自定义错误页面, 注意该页面是正向代理的内部重定向或者一个302跳转.

nginx的配置文件内容如下:

 14         server {
15 listen 80;
16 server_name abc.com;
17
18 root E:\cygwin64\home\Administrator\www;
19
20 proxy_intercept_errors on; # 开启代理错误拦截
21 #recursive_error_pages on; # 递归错误页面(暂时不知道用途, 不过猜测和301 302等错误有关)
22
23 location = /a {
24 return http://abc.com/a/index.jsp;
25 }
26
27 location /a/ {
28 proxy_pass http://tomcat/Shop/;
29 proxy_set_header Host $host;
30 proxy_set_header X-Real-IP $remote_addr;
31
32 error_page 404 /404;
33 proxy_redirect http://$host/Shop/ http://$host/store/;
34 }
35
36 location / {
37 index index.htm;
38 try_files $uri $uri/ $uri.htm =404;
39 }
40
41 location = /404 {
42 try_files /err.htm =404;
43 }
44 }

配置 SSL



        server {
listen 80; listen 443 ssl; # HTTPS 支持
ssl_certificate E:\\WebServer\\nginx\\server.crt; # 证书crt文件所在目录
ssl_certificate_key E:\\WebServer\\nginx\\server.key; # 证书key文件所在目录
#ssl_session_cache shared:SSL:1m;
#ssl_session_timeout 5m;
#ssl_ciphers HIGH:!aNULL:!MD5;
#ssl_prefer_server_ciphers on; server_name abc.com;
...
}

拒绝服务



location ~ /(deluser|resetdata)/.*\.php$ {
deny all;
}

Nginx 完全配置的更多相关文章

  1. 如何在Nginx下配置PHP程序环境

    1.nginx与PHP的关系 首先来看nginx与php的关系, FastCGI的关系(而不是像apache那样安装成nginx的模块) FastCGI的意思是, 快速的通用网关接口:CGI Comm ...

  2. 从零开始学 Java - CentOS 下 Nginx + Tomcat 配置负载均衡

    为什么现在有非常多的聪明人都在致力于互联网? 最近在读埃隆·马斯克传记,他说「我认为现在有非常多的聪明人都在致力于互联网」. 仔细一想,好像真的是这样的. 我问了自己一个问题:如果你不敲代码了,你能做 ...

  3. Nginx主配置参数详解,Nginx配置网站

    1.Niginx主配置文件参数详解 a.上面博客说了在Linux中安装nginx.博文地址为:http://www.cnblogs.com/hanyinglong/p/5102141.html b.当 ...

  4. nginx + tomcat配置负载均衡

    目标:Nginx做为HttpServer,连接多个tomcat应用实例,进行负载均衡. 注:本例程以一台机器为例子,即同一台机器上装一个nginx和2个Tomcat且安装了JDK1.7. 1.安装Ng ...

  5. spring4+websocket+nginx详细配置

    实现的版本jdk1.7.0_25, tomcat7.0.47.0, Tengine/2.1.1 (nginx/1.6.2), servlet3.0, spring4.2.2 使用maven导入版本3. ...

  6. Nginx Location配置总结

    Nginx Location配置总结 语法规则: location [=|~|~*|^~] /uri/ { - }= 开头表示精确匹配^~ 开头表示uri以某个常规字符串开头,理解为匹配 url路径即 ...

  7. 理解nginx的配置

    Nginx配置文件主要分成四部分:main(全局设置).server(主机设置).upstream(上游服务器设置,主要为反向代理.负载均衡相关配置)和 location(URL匹配特定位置后的设置) ...

  8. nginx缓存配置的操作记录梳理

    web缓存位于内容源Web服务器和客户端之间,当用户访问一个URL时,Web缓存服务器会去后端Web源服务器取回要输出的内容,然后,当下一个请求到来时,如果访问的是相同的URL,Web缓存服务器直接输 ...

  9. 在nginx中配置如何防止直接用ip访问服务器web server及server_name特性讲解

    看了很多nginx的配置,好像都忽略了ip直接访问web的问题,不利于SEO优化,所以我们希望可以避免直接用IP访问网站,而是域名访问,具体怎么做呢,看下面. 官方文档中提供的方法: If you d ...

  10. Nginx下配置ThinkPHP的URL Rewrite模式和pathinfo模式支持

    前面有关于lnmp环境的搭建,在此就不在赘述.下面就简述thinkPHP如何在nginx下开启url_rewrite和pathinfo模式支持 主要有两个步骤: 一.更改php.ini将;cgi.fi ...

随机推荐

  1. golang语言示例

    package main import "fmt" /* my first programmer in go */ func fib(n int) int{ if n<2{ ...

  2. Java通过JDBC连接数据库的三种方式!!!并对数据库实现增删改查

    前言 java连接数据库完整流程为: 1,获得驱动(driver),数据库连接(url),用户名(username),密码(password)基本信息的三种方式. 2,通过获得的信息完成JDBC实现连 ...

  3. Objective-C Block与函数指针比较

    相似点 1.函数指针和Block都可以实现回调的操作,声明上也很相似,实现上都可以看成是一个代码片段. 2.函数指针类型和Block类型都可以作为变量和函数参数的类型.(typedef定义别名之后,这 ...

  4. git之命令git checkout

    git checkout 最常用的就是切换分支,最近又发现一种新的用法: 有时候,在看代码的时候,不小心改动了部分代码,但跟项目没啥关系,这个时候,想不去提交这些代码,怎么处理呢? 使用git che ...

  5. 随机IP

    function rand_ip(){ $ip_longs = array( array('607649792', '608174079'),        //36.56.0.0-36.63.255 ...

  6. Storm入门(二)集群环境安装

    1.集群规划 storm版本的变更:storm0.9.x   storm0.10.x  storm1.x上面这些版本里面storm的核心源码是由Java+clojule组成的.storm2.x后期这个 ...

  7. 我一个二本大学是如何拿到百度、网易大厂offer的!

    本文首发在我的微信公众号“程序员柯南”,底部附有二维码.原文阅读 01终于步入大学 我既没有跨过山和大海,也没有穿过人山人海,我就是我,一个2020届普通本科大学生.身为读者的你,关注了我,自然是想获 ...

  8. AOP 还在配置吗改用打标签模式吧!

    为什么我喜欢打标签来配置AOP 1. 配置多很混乱,代码里面很难分辨出来哪些是AOP容器(比如属性注入) 2. 对于代码生成器生成的代码里面还需要手动加到配置里面 3. 连java spring现在都 ...

  9. java+testng接口测试入门

    testNG是一个测试框架,它能组织测试用例按照你想要的方式进行运行,并输出一定格式的便于阅读的测试报告(结果),通过java+testng的方式说明一下接口测试的基本使用方法. 一.环境搭建 a)千 ...

  10. 高橋君とカード / Tak and Cards AtCoder - 2037 (DP)

    Problem Statement Tak has N cards. On the i-th (1≤i≤N) card is written an integer xi. He is selectin ...