Nginx 配置详解

关键字 :nginx
公司新版的管理系统使用前后端分离,所以前后端要分别配置 nginx 。所以认真学习了一下nginx 的配置,nginx 的配置文件保存在在 conf 目录下



1. 各个配置文件说明
 1.1 fastcgi.conf,fastcgi 相关参数的配置文件

对比下 fastcgi.conf 与 fastcgi_params 文件,可以看出只有以下差异:
即 fastcgi.conf 只比 fastcgi_params 多了一行“ fastcgi_param SCRIPT_FILENAME $document_root $fastcgi_script_name;”
原本只有fastcgi_params文件,fastcgi.conf 是 Nginx 0.8.30 (released: 15th of December 2009)才引入的。主要为是解决以下问题(参考:http://www.dwz.cn/x3GIJ)
原本 Nginx 只有 fastcgi_params ,后来发现很多人在定义 SCRIPT_FILENAME 时使用了硬编码的方式。例如,fastcgi_param SCRIPT_FILENAME /var/www/foo$fastcgi_script_name 。于是为了规范用法便引入了 fastcgi.conf。
不过这样的话就产生一个疑问:为什么一定要引入一个新的配置文件,而不是修改旧的配置文件?这是因为 fastcgi_param 指令是数组型的,和普通指令相同的是:内层替换外层;和普通指令不同的是:当在同级多次使用的时候,是新增而不是替换。换句话说,如果在同级定义两次 SCRIPT_FILENAME,那么它们都会被发送到后端,这可能会导致一些潜在的问题,为了避免此类情况,便引入了一个新的配置文件因此不再建议大家使用以下方式(搜了一下,网上大量的文章,并且 nginx.conf 的默认配置也是使用这种方式):
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;

1.2  fastcgi_params,fastcgi 相关参数的配置文件

nginx 配置 Fastcgi 解析时会调用 fastcgi_params 配置文件来传递服务器变量,这样CGI中可以获取到这些变量的值


1.3 koi-utf、koi-win、win-utf
这三个文件都是与编码转换映射文件,用于在输出内容到客户端时,将一种编码转换到另一种编码。

koi-win: charset_map koi8-r < -- > windows-1251
koi-utf: charset_map koi8-r < -- > utf-8
win-utf: charset_map windows-1251 < -- > utf-8

koi8-r 是斯拉夫文字8位元编码,供俄语及保加利亚语使用。在Unicode未流行之前,KOI8-R 是最为广泛使用的俄语编码,使用率甚至起ISO/IEC 8859-5还高。这3个文件存在是因为作者是俄国人的原因

1.4 mime.types

文件扩展名与文件类型映射表,nginx 根据映射关系,设置 http 请求响应头的 Content-Type 值。当在映射表找不到时,使用 nginx.conf 中 default-type 指定的默认值。
例如,默认配置中的指定的 default-type 为 application/octet-stream 。
include mime.types;
default_type application/octet-stream;
默认下面截一段mime.types定义的文件扩展名与文件类型映射关系


2. nginx.conf 配置文件

配置文件结构
...              #全局块

events { #events块
...
}

http #http块
{
... #http全局块
server #server块
{
... #server全局块
location [PATTERN] #location块
{
...
}
location [PATTERN]
{
...
}
}
server
{
...
}
... #http全局块
}​


1、全局块:配置影响 nginx 全局的指令。一般有运行 nginx 服务器的用户组,nginx 进程 pid 存放路径,日志存放路径,配置文件引入,允许生成 worker process 数等。

2、events 块:配置影响 nginx 服务器或与用户的网络连接。有每个进程的最大连接数,选取哪种事件驱动模型处理连接请求,是否允许同时接受多个网路连接,开启多个网络连接序列化等。

3、http 块:可以嵌套多个 server ,配置代理,缓存,日志定义等绝大多数功能和第三方模块的配置。如文件引入,mime-type 定义,日志自定义,是否使用 sendfile 传输文件,连接超时时间,单连接请求数等。

4、server 块:配置虚拟主机的相关参数,一个 http 中可以有多个 server。

5、location 块:配置请求的路由,以及各种页面的处理情况。

本人本地的 nginx.conf 配置
user   Jane;  #配置用户或者组,nginx的worker进程用哪个用户和组进行登录,默认为nobody nobody
worker_processes 1; #允许生成的进程数,默认为1

#error_log logs/error.log; #制定日志路径,级别。这个设置可以放入全局块,http块,server块,级别以此为:debug|info|notice|warn|error|crit|alert|emerg

#error_log logs/error.log notice;
#error_log logs/error.log info;

#pid logs/nginx.pid; #指定nginx进程运行文件存放地址,进程作为系统的守护进程运行,就需要在某个文件中保存进程的ID号


events {
#accept_mutex on; #设置网路连接序列化,防止惊群现象发生,默认为on
#multi_accept on; #设置一个进程是否同时接受多个网络连接,默认为off
#use epoll; #事件驱动模型,select|poll|kqueue|epoll|resig|/dev/poll|eventport
worker_connections 1024; #最大连接数,默认为512

}


http {
include mime.types; #文件扩展名与文件类型映射表
default_type application/octet-stream; #默认文件类型,默认为text/plain
#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 logs/access.log main; #combined为日志格式的默认值

sendfile on; #允许sendfile方式传输文件,默认为off,可以在http块,server块,location块。
#tcp_nopush on; #是否启用AIO机制,默认是OFF,在Linux 2.6.22内核及后续版本才支持。

#keepalive_timeout 0;
keepalive_timeout 65; #一次长连接允许发起的最大请求数量,用户与服务器建立连接后,通过此连接可以发起的最多多少次请求,该参数可以定义在http{}段中,也可以定义在server{}段中、location{}段中

#gzip on; #gzip实现压缩的时候使用缓冲的大小,第一个参数是缓存空间个数,第二个是缓存大小。默认情况下


include conf.d/*; #表示包含当前路径下目录中的所有文件

gzip on; #开启或关闭 gzip on off, gzip实现压缩的时候使用缓冲的大小,第一个参数是缓存空间个数,第二个是缓存大小
gzip_disable "msie6"; #不适用 gzip IE6
gzip_min_length 1k; #gzip 压缩最小文件大小,超出进行压缩
gzip_buffers 4 16k; #buffer 不用修改
#gzip_http_version 1.1; #gzip 支持的 http 协议
gzip_comp_level 8; #压缩级别:1-10,数字越大压缩得越好,时间也越长
gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png; #压缩文件
}​

3. 虚拟主机配置

server {
listen 8089 default_server; # 监听端口
listen [::]:8089 default_server; # ipv6
server_name localhost; # 服务域名

root /Users/luomeizhen/develop/AOS/www/aos_server/public; # 默认网站根目录(www目录)

location / {
index index.php index.html index.htm;
if (!-e $request_filename) {
rewrite ^(.*)$ /index.php?s=/$1 last;
}
}

error_page 404 /404.html; 重定向页面
location = /40x.html {
}

error_page 500 502 503 504 /50x.html; 重定向页面
location = /50x.html {
}

# PHP 脚本请求全部转发到 FastCGI处理. 使用FastCGI协议默认配置.
# Fastcgi服务器和程序(PHP,Python)沟通的协议.
location ~ \.php$ {
# 设置监听端口
fastcgi_pass 127.0.0.1:9000;
# 设置nginx的默认首页文件(上面已经设置过了,可以删除)
fastcgi_index index.php;
# 设置脚本文件请求的路径
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
# 引入fastcgi的配置文件
include fastcgi_params;
}
}​

# https 配置
server {
listen 192.168.1.11:443; #ssl端口
server_name test.com;
#为一个server{......}开启ssl支持
ssl on;
#指定PEM格式的证书文件
ssl_certificate /etc/nginx/test.pem;
#指定PEM格式的私钥文件
ssl_certificate_key /etc/nginx/test.key;

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

# 1. 根目录
location / {
root /home/barret/test/;
}
# 2. 别名
location /blog {
alias /home/barret/www/blog/;
}
# 3. try_files
try_files $uri $uri.html $uri/index.html @other;
location @other {
# 尝试寻找匹配 uri 的文件,失败了就会转到上游处理
proxy_pass http://localhost:9000;
}
location / {
# 尝试寻找匹配 uri 的文件,没找到直接返回 502
try_files $uri $uri.html =502;
}
# 4. 反向代理
location / {
proxy_pass_header Server;
proxy_set_header Host $http_host; #所请求的目的主机名
proxy_set_header X-Real-IP $remote_addr; #把真实客户端IP写入到请求头X-Real-IP
proxy_set_header X-Scheme $scheme;
proxy_pass http//ggzy; # 代理的ip地址和端口号
}

★博文内容均由个人提供,与平台无关,如有违法或侵权,请与网站管理员联系。

★文明上网,请理性发言。内容一周内被举报5次,发文人进小黑屋喔~

评论