nginx

微笑、不失礼 提交于 2020-03-09 15:12:14

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++gccopenssl-develpcre-develzlib-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 
  1. 检查一下是否已经安装有nginx(如果没有就开始安装吧骚年)
# find -name nginx 
如果系统已经安装了nginx,那么就先卸载
# yum remove nginx 
  1. 开始安装
//在/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安装的目录,makemake 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的./configuremake来完成。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的值可能随请求的处理过程而变化,例如在内部进行跳转时,或使用默认页时

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!