nginx 常用变量

常用变量

$args : #这个变量等于请求行中的参数,同$query_string
$content_length : 请求头中的Content-length字段。
$content_type : 请求头中的Content-Type字段。
$document_root : 当前请求在root指令中指定的值。
$host : 请求主机头字段,否则为服务器名称。
$http_user_agent : 客户端agent信息
$http_cookie : 客户端cookie信息
$limit_rate : 这个变量可以限制连接速率。
$status 请求状态
$body_bytes_sent 发送字节
$request_method : 客户端请求的动作,通常为GET或POST。
$remote_addr : 客户端的IP地址。
$remote_port : 客户端的端口。
$remote_user : 已经经过Auth Basic Module验证的用户名。
$request_filename : 当前请求的文件路径,由root或alias指令与URI请求生成。
$scheme : HTTP方法(如http,https)。
$server_protocol : 请求使用的协议,通常是HTTP/1.0或HTTP/1.1。
$server_addr : 服务器地址,在完成一次系统调用后可以确定这个值。
$server_name : 服务器名称。
$server_port : 请求到达服务器的端口号。
$request_uri : 包含请求参数的原始URI,不包含主机名,如:”/foo/bar.php?arg=baz”。
$uri : 不带请求参数的当前URI,$uri不包含主机名,如”/foo/bar.html”。
$document_uri : 与$uri相同。

apache & nginx 301重定向

  • apache
    在.htaccess加入如下规则:
    RewriteEngine On
    RewriteCond
    %{HTTP_HOST} !^www.maxianwei.cn$ [NC]

    RewriteRule ^(.*)$ http://www.maxianwei.cn/$1 [L,R=301]
有时候是某个文件或目录重定向,设置如下:
RewriteCond %{HTTP_HOST} ^test.maxianwei.cn$
RewriteRule ^news/lists.php$ http://www.maxianwei.cn/news/all.php [R=301,L]
注意,要使用.htaccess文件,Apache要开启rewirte模块哦。
  • nginx
    在nginx配置文件中server 里面加入
    if ( $host != ‘www.maxianwei.cn’ ) {
    rewrite ^/(.*)$ http://www.maxianwei.cn/$1 permanent;
    }

Nginx+Apache+PHP分布处理访问

Nginx本身不自带PHP处理模块,因此需要配置反向代理,将php请求交给其他的PHP解析器执行,然后返回结果给Nginx。

目前流行的方式是使用fast-cgi的方式配置PHP处理服务。其优点是比较简洁,服务器负载轻。但是缺点也是很明显的:无法查看php处理状态。
比如有时候网站因为负荷过高,php处理线程已经全部阻塞,就会造成网站无法再响应php服务。使用fastcgi方式,无法查看是哪些脚本处理时间过长,阻塞了php处理线程。
而Apache的有点就在于,可以很好的查看哪些php脚本处理时间过长,阻塞了有效进程数。

下面的方式是使用Apache最为Nginx的php处理后台:
1、先安装apache
apt-get install apache
并配置好apache正确运行在8001端口。
2、修改nginx的虚拟主机配置,其他php脚本交由apache解析
location ~ \.php$ {
proxy_pass http://127.0.0.1:8001;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_connect_timeout 30;
proxy_send_timeout 30;
proxy_read_timeout 30;
client_max_body_size 10m;
client_body_buffer_size 128k;
proxy_buffer_size 4k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
}
重启nginx和apache就好了。

注意,如果要查看php的处理状态,安装使用apache的监控模块就可以了。

linux中nginx下禁止某目录执行php程序

对上传目录禁止运行php脚本
修改nginx.conf配置文件
禁止单目录:

location ~* ^/attachments/.*.(php|php5)$ {deny all;}

禁止多目录:

location ~* ^/(attachments|uploads)/.*.(php|php5)$ {deny all;}

需要注意以下3点:
1、以上的配置文件代码需要放到 location ~ .php{…}上面,如果放到下面是无效的
2、attachments需要写相对路径,不能写绝对路径
3、不要忘记重启nginx呀,service nginx restart 或 service nginx reload

Nginx中使用htpasswd配置Http认证

监控Nginx服务器运行情况的模块。只要用户在浏览器输入http://your_ip/status,就可以访问监控页面。这样很不安全,因为任何人都可以访问这个页面。是否可以再添加一个授权模块呢?

答案是肯定的,Nginx的源码提供了ngx_http_auth_basic_module这个模块,它可以来解决这个问题。这个模块是默认就编译进nginx的,可以直接拿来使用。

ngx_http_auth_basic_module它提供了最基本的http认证,这是http协议支持的,它会弹出一个框让你输入用户名和密码,只有用户名和密码输入正确了才能访问,这样就能防止http://your_ip/status被任何人访问了。

ngx_http_auth_basic_module是使用文件作为存储介质的,用户名是明文存储,而密码是加密之后再存储,这样在认证框输入的用户名和密码必须和文件的信息匹配才能认证成功。这里使用htpasswd这个命令来生成存放用户名和密码的文件。
什么是 htpasswd ?

htpasswd 是开源 http 服务器 apache httpd 的一个命令工具,用于生成 http 基本认证的密码文件。
安装

ubuntu

sudo apt-get install apache2-utils

1

centos

yum -y install httpd

1

使用
语法

htpasswd(选项)(参数)

1

htpasswd使用帮助

htpasswd 选项说明

-c 创建passwdfile.如果passwdfile 已经存在,那么它会重新写入并删去原有内容.
-n 不更新passwordfile,只将加密后的用户名密码显示在屏幕上;
-m 默认采用MD5算法对密码进行加密
-d 采用CRYPT算法对密码进行加密
-p 不对密码进行进行加密,即使用普通文本格式的密码
-s 采用SHA算法对密码进行加密
-b 命令行中一并输入用户名和密码而不是根据提示输入密码,可以看见明文,不需要交互
-D 删除指定的用户

htpasswd 参数说明

用户:用户名
密码:用户的密码

实例

利用htpasswd命令添加用户

shell> htpasswd -c /usr/local/nginx/.htpasswd Javen
New password:
Re-type new password:
Adding password for user Javen

或者不用交互的模式

shell> htpasswd -bc /usr/local/nginx/.htpasswd Javen javen205

在/usr/local/nginx/目录下生成一个.htpasswd文件,用户名Javen,密码javen205,默认采用MD5加密方式。

在原有密码文件中增加下一个用户

去掉-c选项即可在第一个用户之后添加第二个用户

shell> htpasswd -b /usr/local/nginx/.htpasswd JJ jj

不更新密码文件,只显示加密后的用户名和密码

不更新.passwd文件,只在屏幕上输出用户名和经过加密后的密码。

shell> htpasswd -nb Javen Javen205

利用htpasswd命令删除用户名和密码

shell> htpasswd -D /usr/local/nginx/.htpasswd Javen
Deleting password for user Javen

利用htpasswd命令修改密码

htpasswd 并没有直接修改密码的函数,需要先使用htpasswd删除命令删除指定用户,再利用htpasswd添加用户命令创建用户即可实现修改密码的功能。

htpasswd -D .htpasswd Javen
htpasswd -b .htpasswd Javen javen205

Nginx中使用htpasswd

在配置文件中打开http basic auth认证。

location /status {
auth_basic “Restricted”;
auth_basic_user_file /usr/local/nginx/.htpasswd;
vhost_traffic_status_display;
vhost_traffic_status_display_format html;
}

效果图

访问时提示密码框

本文来自网络:https://blog.csdn.net/zyw_java/article/details/80561316

如果设置好,访问的时候提示500错误,查看nginx错误日志,基本是htpasswd访问权限问题

centos7利用ngxtop监控nginx

在使用centos7的软件包管理程序yum安装python-pip的时候会报一下错误:

No package python-pip available.
Error: Nothing to do

说没有python-pip软件包可以安装。

这是因为像centos这类衍生出来的发行版,他们的源有时候内容更新的比较滞后,或者说有时候一些扩展的源根本就没有。

所以在使用yum来search python-pip的时候,会说没有找到该软件包。因此为了能够安装这些包,需要先安装扩展源EPEL。

EPEL(http://fedoraproject.org/wiki/EPEL) 是由 Fedora 社区打造,为 RHEL 及衍生发行版如 CentOS、Scientific Linux 等提供高质量软件包的项目。

首先安装epel扩展源:

sudo yum -y install epel-release

然后安装python-pip

安装pip

# sudo yum -y install python-pip

安装完之后别忘了清除一下cache

sudo yum clean all

安装好pip之后我们就可以安装ngxtop了

#sudo pip install ngxtop

安装成功,现在可操作ngxtop命令了,

#ngxtop

效果如下

#ngxtop

通常情况下我们的配置文件都在vhosts里面
# ngxtop -c /server/nginx/conf/vhosts/123.conf