Nginx基础(02)

admin2024-04-03  1

Nginx基础(01)

  • 动态网站 : 在不同环境访问 , 网站内容有可能发生变化

  • **静态网站 : ** 在不同环境访问 , 网站内容不会发生变化

    默认nginx仅可以处理静态数据,用户访问任何数据都是直接返回对应的文件,如果如果访问的是一个脚本的话,就会导致直接返回一个脚本给用户,而用户没有脚本解释器,也看不懂脚本源代码!

  • 动静分离 : 区分出动态网站 , 和静态网站 , 使其能够解析动态网站.

动态网站 : LNMP

L linux

N nginx 安装nginx

M mariadb 安装数据库 mariadb

P PHP php-fpm : 帮nginx关联php去翻译动态页面

需要安装的包

  1. gcc
  2. make
  3. pcre-devel
  4. openssl-devel
  5. mariadb
  6. mariadb-server
  7. mariadb-devel
  8. php
  9. php-fpm
  10. php-mysqlnd

FastCGI工作

  • 快速公共网关接口

  • 例 : Nginx 连接到 PHP , 实现动静分离

  • 工作流程

    1. Web Server 启动时载入 FastCGI 进程管理器
    2. FastCGI 进程管理器初始化 , 启动多个解释器进程
    3. 当客户端请求达到 Web Server 时 ,FastCGI进程管理器选择并连接到一个解释器
    4. FastCGI 子进程完成处理后返回结果 , 将标准输出和错误信息从同一个连接返回 Web Server
  • php-fpm 的配置里 [ pm.start_servers=5 ] 决定了开了几个解释器进程

  • nginx对接php-fpm 的两种方式

    • 网络方式
      • nginx 连接设置的网络IP地址 127.0.0.1:9000 , 之后再对接php-fpm
      • 可以在不同主机上
    • 进程间通信( socket ) 默认连接方式
      • 更直接 , 效率更高
      • nginx 直接对接 php-fpm
      • 只能在同一台主机上,或连接上的主机组上

1)启动Nginx服务

 systemctl stop httpd                   #如果该服务存在则关闭该服务
 /usr/local/nginx/sbin/nginx             #启动Nginx服务

2)启动MySQL服务

    [root@proxy ~]# systemctl start  mariadb           #启动服务器
    [root@proxy ~]# systemctl status mariadb           #查看服务状态
    [root@proxy ~]# systemctl enable mariadb           #设置开机启动

3)启动PHP-FPM服务

    [root@proxy ~]# systemctl start php-fpm           #启动服务
    [root@proxy ~]# systemctl status php-fpm          #查看服务状态
    [root@proxy ~]# systemctl enable php-fpm          #设置开机启动

使用浏览器访问192.168.99.5/test.php 则无法看到页面内容,而是会当成要下载的文件,因为浏览器无法解析php代码!

网络链接 (nginx - php)

1. php-fpm配置文件

[ /etc/php-fpm.d/www.conf ]

    [root@proxy etc]# vim /etc/php-fpm.d/www.conf
    
    [www]
    listen = 127.0.0.1:9000              #php-fpm端口号(使用网络通信)
    ;listen = /run/php-fpm/www.sock            #注释该行(进程间通信)
    pm.max_children = 50                #最大进程数量
    pm.start_servers = 5                #最小进程数量
    
    [root@proxy etc]#systemctl restart php-fpm    #重启服务

ss -ntulp | grep php-fpm 可查

2.Nginx配置文件 , 修改/启动
    [root@proxy ~]# vim /usr/local/nginx/conf/nginx.conf   #65行
    ...
     location  ~  \.php$  {        #~是使用正则表达式,匹配以.php结尾
            root           html;
            fastcgi_pass   127.0.0.1:9000;    #将请求转发给本机9000端口
            fastcgi_index  index.php;
           #fastcgi_param   SCRIPT_FILENAME  $document_root$fastcgi_script_name;
            include        fastcgi.conf;       #加载fastcgi配置文件
            }

启动或者重加载nginx

[root@proxy ~]# /usr/local/nginx/sbin/nginx -s reload
3. 测试连接数据库的PHP页面
cp  ~/lnmp_soft/php_scripts/mysql.php  /usr/local/nginx/html   
		#拷贝动态网站测试页面到nginx中

[ /usr/local/nginx/logs ] 日志

  1. access.log 访问日志
  2. error.log 报错日志
  3. nginx.pid 存放当前进程号的日志文件

[ /var/log/php-fpm/www-error.log ] php-fpm的报错日志

进程间连接 (socket)

1. php-fpm配置文件修改

修改 listen

Listen = /run/php-fpm/www.sock 是指向直接连接

[ ls -l /run/php-fpm/www.sock ] —> [ srw-rw----+ … … ] s 表示socket接口

[ getfacl /run/php-fpm/www.sock ] 查看文件属组 , 有Acl成员有读写权限

    [root@proxy etc]# vim /etc/php-fpm.d/www.conf
    [www]
    ;listen = 127.0.0.1:9000                    #注释或删除该行
    listen = /run/php-fpm/www.sock               #socket方式(使用进程通信)
    listen.acl_users = apache,nginx,nobody        #添加nobody账户
    [root@proxy etc]#systemctl restart php-fpm    #重启服务
2. 修改Nginx配置文件并启动
    [root@proxy ~]# vim /usr/local/nginx/conf/nginx.conf
    ...
     location  ~  \.php$  {                    #~是使用正则表达式,匹配以.php结尾
            root           html;
           #fastcgi_pass   127.0.0.1:9000;        #注释或删除该行
            fastcgi_pass  unix:/run/php-fpm/www.sock;  #将请求转发给php-fpm进程
            fastcgi_index  index.php;
           #fastcgi_param   SCRIPT_FILENAME  $document_root$fastcgi_script_name;
            include        fastcgi.conf;            #加载fastcgi配置文件
            }
    [root@proxy ~]# /usr/local/nginx/sbin/nginx -s reload

地址重写

  • 获得一个来访的URL , 然后改成服务器可以处理的另一个URL的过程
  • 通过调整Nginx服务端配置,实现地址重写功能
  • 地址别名
  • 好处 :
    • 缩短URL , 隐藏实际路径提高安全性
    • 易于被搜索引擎收录
    • 易于用户记忆和键入
rewrite
  • rewrite 旧地址 新地址 选项

    • 选项
      • [ last ] 停止执行其他重写规则 , 重新匹配 location
      • [ break ] 停止执行其他的重写规则 , 完成本次请求
      • [ redirect ] 302临时重定向 , 地址栏改变 , 爬虫不更新URL
      • [ permanent ] 301永久重定向 , 地址栏改变 , 爬虫更新URL
      • [ break ] 不再读其他语句 , 结束全部请求

    *[ curl 192.168.99.5/a.html ] curl 不支持重定向网页的显示 , 但是显示状态码 301/302

  • rewrite regex replacement flag
    if (条件) {…}

rewrite 旧地址 新地址 选项

修改Nginx服务配置

[root@proxy nginx]# cp conf/nginx.conf.default conf/nginx.conf    #还原配置文件
[root@proxy nginx]# cp:是否覆盖"conf/nginx.conf"? y
[root@proxy nginx]# vim conf/nginx.conf
.. ..
server {
        listen       80;
        server_name  localhost;
        rewrite  /a.html  /b.html;   # 可以用正则 ^$\ 限制名称
      # rewrite ^/a\.html$  /b.html  redirect; 
    location / {
        root   html;
        index  index.html index.htm;
    }
}
[root@proxy ~]# echo "nginx-B~~" > /usr/local/nginx/html/b.html
redirect 选项
修改Nginx服务配置:

    [root@proxy ~]# vim /usr/local/nginx/conf/nginx.conf
    .. ..
    server {
            listen       80;
            server_name  localhost;
            rewrite ^/a\.html$  /b.html  redirect;  # a 跳转显示为b       
        location / {
            root   html;
            index  index.html index.htm;
        }
    }
不同网站间跳转
修改Nginx服务配置实现访问192.168.99.5的请求重定向至www.tmooc.cn

    [root@proxy ~]# vim /usr/local/nginx/conf/nginx.conf
    .. ..
    server {
            listen       80;
            server_name  localhost;
        rewrite /  http://www.tmooc.cn/;    # 192.168.99.5 跳转 tmooc
        location / {
            root   html;
            index  index.html index.htm;
        }
    }
跳转网站的子页面

修改Nginx服务配置

    [root@proxy ~]# vim /usr/local/nginx/conf/nginx.conf
    .. ..
    server {
            listen       80;
            server_name  localhost;
        location / {
            root   html;
            index  index.html index.htm;
        }
    if ($http_user_agent ~* firefox) {        #如果用户使用了火狐浏览器
    rewrite  /(.*)  http://www.tmooc.cn/;  # 跳转到子页面
    location / {
        root   html;
        index  index.html index.htm;
    }
}
实现不同浏览器跳转到不同页面
创建网页目录以及对应的页面文件:

mkdir  html/firefox
echo  firefox~~  >  html/firefox/abc.html   #火狐专用页面
echo  others~~  >  html/abc.html            #其他浏览器专用页面
修改Nginx服务配置

    [root@proxy ~]# vim /usr/local/nginx/conf/nginx.conf
    .. ..
    server {
            listen       80;
            server_name  localhost;
        location / {
            root   html;
            index  index.html index.htm;
        }
    if ($http_user_agent ~* firefox) {        #如果用户使用了火狐浏览器
    rewrite (.*)  /firefox/;       
    #就进行地址重写,让用户看到火狐专用页面$http_user_agent是nginx的内置变量,存储了用户的信息,比如用的什么浏览器,~是匹配正则  *是忽略大小写
    }
    }
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明原文出处。如若内容造成侵权/违法违规/事实不符,请联系SD编程学习网:675289112@qq.com进行投诉反馈,一经查实,立即删除!