Nginx 完全配置
入门教程
## 设置静态网页编码 --> 针对非类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 完全配置的更多相关文章
- 如何在Nginx下配置PHP程序环境
		
1.nginx与PHP的关系 首先来看nginx与php的关系, FastCGI的关系(而不是像apache那样安装成nginx的模块) FastCGI的意思是, 快速的通用网关接口:CGI Comm ...
 - 从零开始学 Java - CentOS 下 Nginx + Tomcat 配置负载均衡
		
为什么现在有非常多的聪明人都在致力于互联网? 最近在读埃隆·马斯克传记,他说「我认为现在有非常多的聪明人都在致力于互联网」. 仔细一想,好像真的是这样的. 我问了自己一个问题:如果你不敲代码了,你能做 ...
 - Nginx主配置参数详解,Nginx配置网站
		
1.Niginx主配置文件参数详解 a.上面博客说了在Linux中安装nginx.博文地址为:http://www.cnblogs.com/hanyinglong/p/5102141.html b.当 ...
 - nginx + tomcat配置负载均衡
		
目标:Nginx做为HttpServer,连接多个tomcat应用实例,进行负载均衡. 注:本例程以一台机器为例子,即同一台机器上装一个nginx和2个Tomcat且安装了JDK1.7. 1.安装Ng ...
 - 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. ...
 - Nginx Location配置总结
		
Nginx Location配置总结 语法规则: location [=|~|~*|^~] /uri/ { - }= 开头表示精确匹配^~ 开头表示uri以某个常规字符串开头,理解为匹配 url路径即 ...
 - 理解nginx的配置
		
Nginx配置文件主要分成四部分:main(全局设置).server(主机设置).upstream(上游服务器设置,主要为反向代理.负载均衡相关配置)和 location(URL匹配特定位置后的设置) ...
 - nginx缓存配置的操作记录梳理
		
web缓存位于内容源Web服务器和客户端之间,当用户访问一个URL时,Web缓存服务器会去后端Web源服务器取回要输出的内容,然后,当下一个请求到来时,如果访问的是相同的URL,Web缓存服务器直接输 ...
 - 在nginx中配置如何防止直接用ip访问服务器web server及server_name特性讲解
		
看了很多nginx的配置,好像都忽略了ip直接访问web的问题,不利于SEO优化,所以我们希望可以避免直接用IP访问网站,而是域名访问,具体怎么做呢,看下面. 官方文档中提供的方法: If you d ...
 - Nginx下配置ThinkPHP的URL Rewrite模式和pathinfo模式支持
		
前面有关于lnmp环境的搭建,在此就不在赘述.下面就简述thinkPHP如何在nginx下开启url_rewrite和pathinfo模式支持 主要有两个步骤: 一.更改php.ini将;cgi.fi ...
 
随机推荐
- POJ 3085 - Quick Change
			
Quick Change Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 6288 Accepted: 4468 Desc ...
 - Java集合框架体系JCF
			
Java 集合框架体系作为Java 中十分重要的一环, 在我们的日常开发中扮演者十分重要的角色, 那么什么是Java集合框架体系呢? 在Java语言中,Java语言的设计者对常用的数据结构和算法做了一 ...
 - i春秋misc部分writeup
			
i春秋misc部分writeup 一.敲击 方方格格,然后看到下面的格式,猜测出是键盘上的布局,然后看这些字母形成的形状想那些字母,就是flag了 2.滴滴滴 放到ctfcack里解密,发现时栅栏密码 ...
 - Raneto部署知识库平台&支持中文搜索
			
目录 环境 更新软件包 部署 Raneto 知识库平台 安装 Node 环境 安装 node 管理工具 查看 node 列表 安装需要的Node版本 使用 淘宝NPM源 git 使用代理设置,大陆地区 ...
 - Python爬虫【实战篇】scrapy 框架爬取某招聘网存入mongodb
			
创建项目 scrapy startproject zhaoping 创建爬虫 cd zhaoping scrapy genspider hr zhaopingwang.com 目录结构 items.p ...
 - ABP之调试
			
虽然通常情况下不需要,但是Abp还是提供了能在调试项目中进入Abp源码的方法.. 所有的ABP NuGet包都启用了源码连接.这意味着我们可以在我们的项目中调试ABP源码,要启用它,更改Visual ...
 - CSV的简单用法
			
读文件 import csv with open('test.csv','rb') as myFile: lines=csv.reader(myFile) for line in lines: pri ...
 - HTML HTML5 新特性
			
一.语义化标签 语义化标签 为页面提供了更好的页面结构. 描述 属性 <header></header> 定义文档的头部区域 <footer></foote ...
 - C#关于TreeView树在节点数较多时总是会出现闪烁的问题方法记录
			
首先介绍下背景吧,问题如题,这个问题应该说困扰我大半年了(不是说我没有请教大佬,不是说我没有上网查过,之前在搜索时,总是没有解决此问题~~),直到最近一次在在优化代码时,再次上网查找,在发现搜索词条” ...
 - 第二部分之Redis服务器(第十四章)
			
Redis服务器复制和多个客户端建立网络连接,处理客户端发送的命令请求,在数据库中保存客户端执行命令所产生的数据. 一,命令请求的执行过程 客户端向服务器发送命令请求 set key value 服务 ...