Nginx安装
从官网下载最新版的nginx
# wget http://nginx.org/download/nginx-1.11.0.tar.gz
Linux安装nginx-1.11.0.tar.gz. 为例
将安装包上传至/home/sfot目录下
1.首先由于nginx的一些模块依赖一些lib库,所以在安装nginx之前,必须先安装这些lib库,这些依赖库主要有g++、gcc、openssl-devel、pcre-devel和zlib-devel 所以执行如下命令安装
//安装c++编译环境,如已安装可略过
# yum install gcc gcc-c++ ncurses-devel perl # yum install pcre pcre-devel # yum install zlib gzip zlib-devel # yum install openssl openssl--devel
- 检查一下是否已经安装有nginx(如果没有就开始安装吧骚年)
# find -name nginx 如果系统已经安装了nginx,那么就先卸载 # yum remove nginx
- 开始安装
//在/usr/local/下创建nginx目录 # mkdir /usr/local/nginx //将/home/soft/目录下nginx-1.11.0.tar.gz复制到/usr/local/nginx目录中 # cp nginx-1.11.0.tar.gz /usr/local/nginx/ //来到nginx目录下 # cd /usr/local/nginx //解压nginx压缩包 # tar -zxvf nginx-1.11.0.tar.gz //会产生一个nginx-1.11.0 目录,这时进入nginx-1.11.0目录 # cd nginx-1.11.0 //接下来编译安装,使用--prefix参数指定nginx安装的目录,make、make install安装 # ./configure
nginx大部分常用模块,编译时./configure --help
以--without
开头的都默认安装。
--prefix=PATH
: 指定nginx的安装目录。默认/usr/local/nginx
--conf-path=PATH
: 设置nginx.conf配置文件的路径。nginx允许使用不同的配置文件启动,通过命令行中的-c选项。默认为prefix/conf/nginx.conf--user=name
: 设置nginx工作进程的用户。安装完成后,可以随时在nginx.conf配置文件更改user指令。默认的用户名是nobody。--group=name
类似--with-pcre
: 设置PCRE库的源码路径,如果已通过yum方式安装,使用--with-pcre
自动找到库文件。使用--with-pcre=PATH
时,需要从PCRE网站下载pcre库的源码(版本4.4 – 8.30)并解压,剩下的就交给Nginx的./configure
和make
来完成。perl正则表达式使用在location
指令和ngx_http_rewrite_module
模块中。--with-zlib=PATH
: 指定 zlib(版本1.1.3 – 1.2.5)的源码解压目录。在默认就启用的网络传输压缩模块ngx_http_gzip_module
时需要使用zlib 。--with-http_ssl_module
: 使用https协议模块。默认情况下,该模块没有被构建。前提是openssl与openssl-devel已安装--with-http_stub_status_module
: 用来监控 Nginx 的当前状态--with-http_realip_module
: 通过这个模块允许我们改变客户端请求头中客户端IP地址值(例如X-Real-IP 或 X-Forwarded-For),意义在于能够使得后台服务器记录原始客户端的IP地址--add-module=PATH
: 添加第三方外部模块,如nginx-sticky-module-ng或缓存模块。每次添加新的模块都要重新编译(Tengine可以在新加入module时无需重新编译)
安装 # make //如果执行make install的时候报not find错误执行下面的安装 yum -y install gcc automake autoconf libtool make # make install //也可一步执行(二选其一) # ./configure && make && make install //如果没有报错,顺利完成后,最好看一下nginx的安装目录 # whereis nginx
常用命令
查看nginx是否启动 # ps -ef|grep nginx //执行完会显示nginx的进程ID 测试nginx配置文件是否正确 命令在 /usr/local/nginx 目录下执行 # ./sbin/nginx -t -c ./conf/nginx.conf 启动nginx命令 命令在 /usr/local/nginx 目录下执行 # start ./sbin/nginx -c ./conf/nginx.conf 修改配置后重新加载生效 命令在 / 目录下执行 # ./sbin/nginx -s reload 停止nginx # ./sbin/nginx -s stop
配置泛域名
upstream zk {
server 127.0.0.1:8080;
}
server {
listen 80;
server_name *.zker.com.cn;
index index.html index.htm index.jsp index.jspx index.jhtml;
location / {
root /home/wwwroot/zker/html/;
try_files $uri $uri/ /index.html;
}
location /api/ {
# 泛域名开始配置 获取当前域名前缀设置成变量$domain
# 如: http://beijing.zker.com.cn/api/login?mobile=130xxx 将获得 beijing
if ( $host ~* (.*)\.(.*)\.(.*)\.(.*) ) {
set $domain $1; #获取当前的 域名前缀
}
# $args请求行中的参数 如:mobile=130xxx
# $uri 请求中的当前URI 如: /api/login
# $request_uri 完整的原始请求URI(带有参数) 如:/api/login?mobile=130xxx
proxy_pass http://zk$document_uri?channel=$domain&$args;
proxy_redirect off;
proxy_set_header Host $host; #设置SERVER_HOST 为当前访问的域名,后台获取该变量解析即可。php 用$_SERVER查看
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
client_max_body_size 10m;
client_body_buffer_size 128k;
proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_buffer_size 4k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
}
Nginx之内嵌变量详解
$arg_name 请求行中的name参数 $args 请求行中的参数 $binary_remote_addr 客户端地址为二进制形式,IPv4地址值的长度是4字节,IPv6地址值的长度是16字节 $body_bytes_sent 返回给客户端的字节数,不包括响应头。此变量与Apache模块mod_log_config的“%B”参数兼容 $bytes_sent 返回给客户端的字节数 (1.3.8, 1.2.5) $connection 连接的序列号 (1.3.8, 1.2.5) $connection_requests 当前通过连接发出的请求数 (1.3.8, 1.2.5) $content_length 请求头“Content-Length”的值 $content_type 请求头“Content-Type”的值 $cookie_name cookie名称 $document_root 当前请求的root根目录或alias别名的值 $document_uri 和$uri相同 $host “host”请求头字段的值,如果没有该主机头,则为处理请求的server名称 $hostname 机器名称 $http_name 任意请求头的值,变量名的后半部分“name”可以替换成任意请求头的名称。例如在配置文件中需要获取user-agent值,将“-”换成下划线“_”,如果有大写字母,需要替换成小写字母,即$http_user_agent: $https 如果连接是ssl模式,返回值为“on”,否则返回空字符串 $is_args 如果请求行带有参数,返回值为“?”,否则返回空字符串 $limit_rate 用于限制连接的传输速率 $msec 当前时间单位是秒,精度是毫秒 (1.3.9, 1.2.6) $nginx_version nginx版本号 $pid worker进程的PID $pipe 如果请求来自管道,值为"p",否则为“.” (1.3.12, 1.2.7) $proxy_protocol_addr 获取代理访问服务器的客户端地址,如果直接访问,该值为空字符串 (1.5.12) 设置代理前,必须通过listen指令设置proxy_protocol参数来启用 $proxy_protocol_port 获取代理访问服务器的端口地址,如果直接访问,该值为空字符串 (1.11.0) 设置代理前,必须通过listen指令设置proxy_protocol参数来启用 $query_string 与$args相同 $realpath_root 当前请求的root根目录或alias别名的绝对路径,会将所有软连接解析成真实文件路径 $remote_addr 客户端IP地址 $remote_port 客户端端口 $remote_user 基础用户认证提供的用户名,经过Auth Basic Module验证的用户名 $request 客户端的请求地址 $request_body 客户端请求主体此变量可在location中使用,将请求主体通过proxy_pass, fastcgi_pass, uwsgi_pass, 和scgi_pass传递给下一级的代理服务器 $request_body_file 客户端请求主体临时文件名 文件处理结束后,此文件将被删除,如果希望总是将请求主体写入文件,需要设置client_body_in_file_only,如果将此文件传递给后端代理服务器,需要禁用request body,即设置proxy_pass_request_body off,fastcgi_pass_request_body off,uwsgi_pass_request_body off,或scgi_pass_request_body off $request_completion 如果请求成功,返回"OK",否则返回空字符串 $request_filename 基于root或alias,以及请求的URI,得到当前请求的文件路径 $request_id 由16个随机字节生成唯一的请求标识符,以十六进制表示 (1.11.0) $request_length 请求长度(包括请求地址、http请求头和请求主体) (1.3.12, 1.2.7) $request_method 客户端请求方法,通常是“GET”或“POST” $request_time 客户端请求处理的时间,单位为秒,精度毫秒 (1.3.9, 1.2.6); 从客户端接收到第一个字节开始计算 $request_uri 客户端请求参数的原始URI(带参数) $scheme 请求协议类型,“http”或“https” $sent_http_name 任意响应头字段的值,变量名的后半部分“name”可以替换成任意响应头的名称。例如在配置文件中需要获取Cache-Control值,将“-”换成下划线“_”,如果有大写字母,需要替换成小写字母,即$sent_http_Cache_Control $sent_trailer_name 响应结束时发送的任意字段(1.13.2),变量名的后半部分“name”可以替换成任意响应头的名称 $server_addr 接受请求的服务器地址 计算此变量的值通常需要一次系统调用,为了避免系统调用,必须指定listen的地址,并且使用bind参数 $server_name 接受请求的服务器名称 $server_port 接受请求的服务器端口 $server_protocol 请求协议,通常是“HTTP/1.0”, “HTTP/1.1”, or “HTTP/2.0” $status 响应状态码 (1.3.2, 1.2.2) $tcpinfo_rtt, $tcpinfo_rttvar, $tcpinfo_snd_cwnd, $tcpinfo_rcv_space 客户端TCP连接信息,在支持的TCP_INFO套接字选项的系统上可用 $time_iso8601 服务器时间ISO 8610格式(1.3.12, 1.2.7) $time_local 通用日志格式的本地时间 (1.3.12, 1.2.7) $uri 当前请求规范化后的URI,等同于$document_uri$uri的值可能随请求的处理过程而变化,例如在内部进行跳转时,或使用默认页时
来源:oschina
链接:https://my.oschina.net/u/3465808/blog/3190499