在使用 CloudFormation YAML 设置 RDS 数据库时,如何为 AWS RDS Oracle 实例启用和强制执行/强制传输中的加密。
Tim's questions
我在 us-west-2(俄勒冈州)有一个 Amazon Linux v1 实例,但 yum 更新失败,如下所示。这是一个运行良好几年的旧实例,几个月前更新为 t3a.nano。它在 VPC 中有一个 S3 网关。
我在同一区域创建了一个 m3.large 实例,并且更新没有问题。
任何想法如何解决这个问题?我没有 AWS 支持,所以我不能问他们,但如果它仍然存在,我会再次尝试在一个支持的帐户中重现。
sudo yum update amazon-ssm-agent
Loaded plugins: update-motd, upgrade-helper
Resolving Dependencies
--> Running transaction check
---> Package amazon-ssm-agent.x86_64 0:2.3.662.0-1.amzn1 will be updated
---> Package amazon-ssm-agent.x86_64 0:2.3.714.0-1.amzn1 will be an update
--> Finished Dependency Resolution
Dependencies Resolved
===============================================================================================================
Package Arch Version Repository Size
===============================================================================================================
Updating:
amazon-ssm-agent x86_64 2.3.714.0-1.amzn1 amzn-updates 25 M
Transaction Summary
===============================================================================================================
Upgrade 1 Package
Total download size: 25 M
Is this ok [y/d/N]: y
Downloading packages:
amazon-ssm-agent-2.3.714.0-1.a FAILED
http://packages.us-east-1.amazonaws.com/2018.03/updates/5444ecdf4764/x86_64/Packages/amazon-ssm-agent-2.3.714.0-1.amzn1.x86_64.rpm?instance_id=i-863eaf5c®ion=us-west-2: [Errno 14] HTTP Error 403 - Forbidden
Trying other mirror.
To address this issue please refer to the below knowledge base article
https://access.redhat.com/solutions/69319
If above article doesn't help to resolve this issue please open a ticket with Red Hat Support.
amazon-ssm-agent-2.3.714.0-1.a FAILED
http://packages.ap-northeast-2.amazonaws.com/2018.03/updates/5444ecdf4764/x86_64/Packages/amazon-ssm-agent-2.3.714.0-1.amzn1.x86_64.rpm?instance_id=i-863eaf5c®ion=us-west-2: [Errno 14] HTTP Error 403 - Forbidden
Trying other mirror.
amazon-ssm-agent-2.3.714.0-1.a FAILED
http://packages.ap-east-1.amazonaws.com/2018.03/updates/5444ecdf4764/x86_64/Packages/amazon-ssm-agent-2.3.714.0-1.amzn1.x86_64.rpm?instance_id=i-863eaf5c®ion=us-west-2: [Errno 14] HTTP Error 403 - Forbidden
Trying other mirror.
amazon-ssm-agent-2.3.714.0-1.a FAILED
http://packages.eu-central-1.amazonaws.com/2018.03/updates/5444ecdf4764/x86_64/Packages/amazon-ssm-agent-2.3.714.0-1.amzn1.x86_64.rpm?instance_id=i-863eaf5c®ion=us-west-2: [Errno 14] HTTP Error 403 - Forbidden
Trying other mirror.
amazon-ssm-agent-2.3.714.0-1.a FAILED
http://packages.sa-east-1.amazonaws.com/2018.03/updates/5444ecdf4764/x86_64/Packages/amazon-ssm-agent-2.3.714.0-1.amzn1.x86_64.rpm?instance_id=i-863eaf5c®ion=us-west-2: [Errno 14] HTTP Error 403 - Forbidden
Trying other mirror.
amazon-ssm-agent-2.3.714.0-1.a FAILED
http://packages.ap-southeast-2.amazonaws.com/2018.03/updates/5444ecdf4764/x86_64/Packages/amazon-ssm-agent-2.3.714.0-1.amzn1.x86_64.rpm?instance_id=i-863eaf5c®ion=us-west-2: [Errno 14] HTTP Error 403 - Forbidden
Trying other mirror.
amazon-ssm-agent-2.3.714.0-1.a FAILED
http://packages.us-west-2.amazonaws.com/2018.03/updates/5444ecdf4764/x86_64/Packages/amazon-ssm-agent-2.3.714.0-1.amzn1.x86_64.rpm?instance_id=i-863eaf5c®ion=us-west-2: [Errno 14] HTTP Error 403 - Forbidden
Trying other mirror.
amazon-ssm-agent-2.3.714.0-1.a FAILED
http://packages.us-west-1.amazonaws.com/2018.03/updates/5444ecdf4764/x86_64/Packages/amazon-ssm-agent-2.3.714.0-1.amzn1.x86_64.rpm?instance_id=i-863eaf5c®ion=us-west-2: [Errno 14] HTTP Error 403 - Forbidden
Trying other mirror.
amazon-ssm-agent-2.3.714.0-1.a FAILED
http://packages.ap-southeast-1.amazonaws.com/2018.03/updates/5444ecdf4764/x86_64/Packages/amazon-ssm-agent-2.3.714.0-1.amzn1.x86_64.rpm?instance_id=i-863eaf5c®ion=us-west-2: [Errno 14] HTTP Error 403 - Forbidden
Trying other mirror.
amazon-ssm-agent-2.3.714.0-1.a FAILED
http://packages.ap-northeast-1.amazonaws.com/2018.03/updates/5444ecdf4764/x86_64/Packages/amazon-ssm-agent-2.3.714.0-1.amzn1.x86_64.rpm?instance_id=i-863eaf5c®ion=us-west-2: [Errno 14] HTTP Error 403 - Forbidden
Trying other mirror.
amazon-ssm-agent-2.3.714.0-1.a FAILED
http://packages.eu-west-1.amazonaws.com/2018.03/updates/5444ecdf4764/x86_64/Packages/amazon-ssm-agent-2.3.714.0-1.amzn1.x86_64.rpm?instance_id=i-863eaf5c®ion=us-west-2: [Errno 14] HTTP Error 403 - Forbidden
Trying other mirror.
Error downloading packages:
amazon-ssm-agent-2.3.714.0-1.amzn1.x86_64: [Errno 256] No more mirrors to try.
更新
根据大卫关于“yum clean all”的建议,我登录并尝试了它。在我这样做之后,yum no 说没有可用的更新 - 尽管 Amazon Linux 告诉我当我通过 SSH 登录时有三个可用的更新。
笔记:
- 当前 amazon-ssm-agent 是 2.3.662.0
- 之前 yum 表示会从 0:2.3.662.0 更新到 0:2.3.714.0-1
这是 SSH 会话
Last login: Thu Dec 19 09:28:01 2019 from (IP address removed)
3 package(s) needed for security, out of 8 available <-- ***
Run "sudo yum update" to apply all updates.
sudo yum clean all
Loaded plugins: update-motd, upgrade-helper
Cleaning repos: amzn-main amzn-updates epel-debuginfo epel-source
Cleaning up everything
sudo yum update -y
Loaded plugins: update-motd, upgrade-helper
amzn-main | 2.1 kB 00:00
amzn-updates | 2.5 kB 00:00
epel-debuginfo/x86_64/metalink | 17 kB 00:00
epel-debuginfo | 3.0 kB 00:00
epel-source/x86_64/metalink | 17 kB 00:00
epel-source | 4.1 kB 00:00
(1/8): amzn-main/latest/group_gz | 4.4 kB 00:00
(2/8): amzn-updates/latest/group_gz | 4.4 kB 00:00
(3/8): epel-source/x86_64/updateinfo | 792 kB 00:00
(4/8): amzn-updates/latest/updateinfo | 615 kB 00:00
(5/8): epel-source/x86_64/primary_db | 1.9 MB 00:00
(6/8): epel-debuginfo/x86_64/primary_db | 831 kB 00:00
(7/8): amzn-main/latest/primary_db | 4.0 MB 00:01
(8/8): amzn-updates/latest/primary_db | 2.5 MB 00:01
No packages marked for update
是否可以强制 AWS 组织内的所有账户只能创建加密的 EBS 卷?
我知道您可以使用IAM 角色来执行它,但我想知道它是否可以使用 SCP 来完成。
到目前为止,这是我想出的,但它不起作用。我已将此附加到我组织内的一个帐户,但我可以创建加密和未加密的卷。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Deny",
"Action": "ec2:CreateVolume",
"Resource": "*",
"Condition": {
"Bool": {
"ec2:Encrypted": "false"
}
}
}
]
}
我正在尝试使用 CloudFormation 将现有卷安装到新的 EC2 Windows 实例。这似乎应该是可能的。
大图
我有一个供应商提供的 AMI,它安装了一些预配置的软件。我们想要创建一个实例,并且我们会偶尔更改 EC2 实例大小以进行性能测试。我们不想丢失我们将从 AMI 创建的单个 EBS 磁盘上的数据。
由于我们使用的是 CloudFormation,如果我们简单地更改 AWS::EC2::Instance.InstanceType 属性并上传修改后的堆栈 CloudFormation 将从 AMI 中获得一个新实例和卷。这没有帮助,因为我们会丢失从现有磁盘上传的数据。
体积法
我首先尝试了这个脚本。
WindowsVolume:
Type: AWS::EC2::Volume
Properties:
AutoEnableIO: true
AvailabilityZone: "ap-southeast-2b"
Encrypted: true
Size: 30
SnapshotId: snap-0008f111111111
Tags:
- Key: Name
Value:
Ref: AWS::StackName
VolumeType: gp2
EC2Instance:
Type: AWS::EC2::Instance
InstanceType: t2.micro
ImageId: ami-663bdc04 # Windows Server stock image
KeyName: removed
IamInstanceProfile: removed
InstanceInitiatedShutdownBehavior: stop
SecurityGroupIds:
Fn::Split: [",", "Fn::ImportValue": StackName-ServerSecurityGroup]
SubnetId:
!ImportValue StackName-Subnet1
Volumes:
- Device: "/dev/sda1"
VolumeId:
Ref: WindowsVolume
我收到错误消息
unixDevice 的值“/dev/sda1”无效。连接点 /dev/sda1 已在使用中
BlockDeviceMappings 方法
接下来我尝试使用 BlockDeviceMappings
BlockDeviceMappings:
- DeviceName: "/dev/sda1"
Ebs:
Ref: WindowsVolume
这次的错误信息是
属性 Ebs 的值必须是一个对象
卷附方法
我也尝试过使用 VolumeAttachment 而不是 Volumes 属性或 BlockDeviceMapping。
VolAttach:
Type: AWS::EC2::VolumeAttachment
Properties:
Device: "/dev/sda1"
InstanceId: !Ref EC2Instance
VolumeId: !Ref WindowsVolume
这给了我与上面相同的信息
unixDevice 的值“/dev/sda1”无效。连接点 /dev/sda1 已在使用中
关键问题
有没有人成功地将现有的根卷或快照挂载到新的 EC2 实例?如果可能的话,正确的方法是什么?
替代方法
很高兴听到其他方法。例如,我考虑过的选项是:
- 使用 CloudFormation 创建 VPC 和相关资源,然后使用控制台手动创建实例。
- 使用 CloudFormation 创建 VPC、相关资源和 EC2 实例。从那时起停止使用 CloudFormation,只需使用 Web 控制台更改实例大小。
是否有一种简单的方法可以在每天的给定时间启动和停止 AWS EC2 实例?这可以为我的开发和测试服务器节省很多钱。
我在 Amazon Linux 上使用此命令安装了 fail2ban
yum install fail2ban
我的 epel 存储库定义为
mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-6&arch=$basearch
尝试启动服务时出现此错误
service fail2ban start
Starting fail2ban: Traceback (most recent call last):
File "/usr/bin/fail2ban-client", line 37, in <module>
from fail2ban.version import version
ImportError: No module named fail2ban.version
我已经在这个错误报告中使用这个 diff尝试了这个修复,它没有合并到我拥有的脚本中。它没有任何区别。我试过也试过这个,但我不知道它是如何工作的,如果你打算运行任何东西等等。
谁能建议如何让 fail2ban 在 Amazon Linux 上运行?
注意以下是使用 fail2ban 安装的内容
我已安装 AWStats 7.0(Amazon Linux 存储库中的最新版本)以尝试获取有关带宽使用情况的更多信息。我无法让 AWSStats 解析我的日志 - 我怀疑这是因为我无法正确获取 LogFormat。
我尝试了很多变化,但我无法让它工作。
这是我的 Nginx 日志格式
log_format main '$remote_addr - $remote_user [$time_local] "$host" "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for" "$request_time" '
'"$upstream_cache_status" "$sent_http_content_encoding" ';
这是一个日志条目
1.1.1.1 - - [12/Mar/2017:07:23:53 +1300] "www.example.com" "GET /url/ HTTP/1.1" 200 7455 "https://www.google.ru/" "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36" "46.71.136.54" "0.000" "HIT" "gzip"
这是我的 AStats 配置文件。此处没有的任何内容都是标准的,并且从主配置文件继承
# Path to you nginx vhost log file
LogFile="/var/log/nginx/pts.access.log"
# Domain of your vhost
SiteDomain="example.com"
# Directory where to store the awstats data
DirData="/var/lib/awstats/pts/"
# Other alias, basically other domain/subdomain that's the same as the domain above
HostAliases="www.example.com"
LogFormat = "%host %logname %time1 %virtualname %methodurl %code %bytesd %refererquot %uaquot %otherquot %otherquot %otherquot %otherquot"
这是awstats的输出
[root]# /usr/share/awstats/tools/awstats_updateall.pl now -awstatsprog=/usr/share/awstats/wwwroot/cgi-bin/awstats.pl
Running '"/usr/share/awstats/wwwroot/cgi-bin/awstats.pl" -update -config=example.com -configdir="/etc/awstats"' to update config example.com
Create/Update database for config "/etc/awstats/awstats.example.com.conf" by AWStats version 7.0 (build 1.971)
From data in log file "/var/log/nginx/pts.access.log"...
Phase 1 : First bypass old records, searching new record...
Searching new records from beginning of log file...
Jumped lines in file: 0
Parsed lines in file: 323
Found 323 dropped records,
Found 0 comments,
Found 0 blank records,
Found 0 corrupted records,
Found 0 old records,
Found 0 new qualified records.
任何人都可以发现不正确的地方吗?我找不到任何可以提供更多信息的附加信息或 awstats 日志。
今天早上我尝试更新我的生产 Web 服务器(运行 Amazon Linux 的 t2)但它失败了,因为我的 RAM 用完了(php-fpm 拥有一切)。我停止了 php-fpm 以释放一些 RAM,但 yum 更新无法完成。服务器运行正常,但我想解决这个问题。
# yum update
Resolving Dependencies
--> Running transaction check
---> Package glibc-headers.x86_64 0:2.17-106.168.amzn1 will be updated
--> Processing Dependency: glibc-headers = 2.17-106.168.amzn1 for package: glibc-devel-2.17-106.168.amzn1.x86_64
---> Package glibc-headers.x86_64 0:2.17-157.169.amzn1 will be an update
--> Finished Dependency Resolution
Error: Package: glibc-devel-2.17-106.168.amzn1.x86_64 (@amzn-main)
Requires: glibc-headers = 2.17-106.168.amzn1
Removing: glibc-headers-2.17-106.168.amzn1.x86_64 (@amzn-main)
glibc-headers = 2.17-106.168.amzn1
Updated By: glibc-headers-2.17-157.169.amzn1.x86_64 (amzn-updates)
glibc-headers = 2.17-157.169.amzn1
You could try using --skip-broken to work around the problem
** Found 6 pre-existing rpmdb problem(s), 'yum check' output follows:
glibc-devel-2.17-106.168.amzn1.x86_64 has missing requires of glibc(x86-64) = ('0', '2.17', '106.168.amzn1')
glibc-devel-2.17-157.169.amzn1.x86_64 is a duplicate with glibc-devel-2.17-106.168.amzn1.x86_64
glibc-devel-2.17-157.169.amzn1.x86_64 has missing requires of glibc-headers = ('0', '2.17', '157.169.amzn1')
glibc-headers-2.17-106.168.amzn1.x86_64 has missing requires of glibc(x86-64) = ('0', '2.17', '106.168.amzn1')
subversion-1.9.4-2.55.amzn1.x86_64 has missing requires of subversion-libs(x86-64) = ('0', '1.9.4', '2.55.amzn1')
subversion-1.9.5-1.56.amzn1.x86_64 is a duplicate with subversion-1.9.4-2.55.amzn1.x86_64
这是已安装的 glibc 软件包
# rpm -qa | grep glibc
glibc-devel-2.17-157.169.amzn1.x86_64
glibc-devel-2.17-106.168.amzn1.x86_64
glibc-common-2.17-157.169.amzn1.x86_64
glibc-headers-2.17-106.168.amzn1.x86_64
glibc-2.17-157.169.amzn1.x86_64
一个问题似乎是安装了两个不同版本的 glibc-devel。看起来 glibc 的某些部分在版本 106 上,而其他部分在版本 157 上。
我重新启动了服务器,正如预期的那样没有任何区别,但值得一试。我跑了以下,没有效果
yum-complete-transaction
yum-complete-transaction --cleanup-only
yum clean all
过去我也遇到过类似的问题,但使用的软件包不太重要。我只是将它们全部删除,然后再次安装它们。我不相信这对 glibc 是可能的,因为很多事情都依赖于它。
我查看了 Centos 论坛,一个选项似乎是降级一些软件包以降级一些软件包,但我不知道是否有更好的选择。由于这是我的生产服务器,因此在尝试此操作之前,我将不胜感激。如果这是一个好方法,我应该降级哪些软件包?降级后我该怎么办,定期 yum 更新?
请注意,我有定期备份,如果需要,可以从最近的备份中恢复,但我不希望这样做,因为我必须重做一些有点棘手的 SSL 证书工作。我计划将来迁移到 Ubuntu 并使用 CloudFormation 构建服务器,因此如果服务器出现故障,我可以简单地创建另一个,但这是未来的任务。
如果使用 CloudFlare 上的“ Full SSL ”设置,尝试提高使用 CloudFlare CDN(或任何 CDN)的网站是否应该在他们的Nginx实例上配置OCSP 装订?
在此设置中,当浏览器从受 CloudFlare 保护/缓存的站点请求页面时,它们使用 TLS 连接到 CloudFlare,然后使用 TLS 连接到源 Web 服务器以检索新生成的页面。这意味着完成了两组 SSL 协商,增加了检索页面所需的时间。顺便说一句,HTTP/2 意味着每个网站通常只进行一次连接,而不管要下载的资源数量如何。
如果 CloudFlare 检查源 Web 服务器证书的 CRL,我想 OCSP 装订可以减少所需的检查,从而减少 SSL 设置时间。但是,我不是这方面的专家,所以我很感激对此的想法。
CloudFlare 提供的一些关于它是否有用的信息(这表明它对性能没有帮助)
谢谢你的问题。目前,我们不对 origin 提供的证书进行吊销检查。但是,我们可能会在某个时候建议装订 OCSP,如果使用的是公开信任的证书(并且难度不大)。
我在 AWS Oregon 有一个无法删除的快照。当我尝试时它说
Snapshot is in use by AMI ami-d2d83cxx
我检查了每个地区,我没有具有该 ID 的实例。我以前在悉尼地区跑步,现在我在俄勒冈州跑步。我只有一个实例在任何地方运行,外加一个 RDS 实例。
快照的描述是
Copied for DestinationAmi ami-d2d83xx from SourceAmi ami-55cfbbxx
for SourceSnapshot snap-3bf220xx. Task created on 1,453,573,325,838.
当我单击卷链接时,它会转到卷页面,但没有具有该 ID 的卷。
我最好的猜测是 AWS 控制台已经弄糊涂了。我确实为性能测试创建了奇怪的 AMI,但这些 AMI 是私有的,我只使用了很短的时间。我还把东西从悉尼搬到了俄勒冈州。
如何删除此快照?会花我钱的。钱不多,但也不少。
我正在尝试使用 Nginx 页面缓存而不是 Wordpress 缓存。缓存似乎工作正常,但我无法根据变量设置条件缓存标头 - 用户是否登录到 wordpress。如果用户已登录,我希望应用无缓存标头,否则 Wordpress 和 CDN 都可以将页面缓存一天。我发现我只能在 if 语句中添加一个标题。
我已经阅读(但没有完全理解,因为这里已经很晚了)[如果是邪恶的][1]。我还找到了关于堆栈交换的答案(在我的笔记本电脑上,现在找不到),在 if 块中只有一个 add_header 有效。
谁能给我一个可能更好的替代方案的想法?我知道我可以将过期与缓存控制结合起来,但我想要更多的标题,而且我想理解和学习。
这是一个显着简化的配置,其中包含相关部分。
server {
server_name example.com;
set $skip_cache 0;
# POST requests and urls with a query string should always go to PHP
if ($request_method = POST) {
set $skip_cache 1;
}
if ($query_string != "") {
set $skip_cache 1;
}
# Don't cache uris containing the following segments.
if ($request_uri ~* "/wp-admin/|/admin-*|/xmlrpc.php|wp-.*.php|/feed/|index.php|sitemap(_index)?.xml") {
set $skip_cache 1;
}
# Don't use the cache for logged in users or recent commenters
if ($http_cookie ~* "comment_author|wordpress_[a-f0-9]+|wp-postpass|wordpress_no_cache|wordpress_logged_in") {
set $skip_cache 1;
}
location / {
try_files $uri $uri/ /blog/index.php?args;
}
location ~ \.(hh|php)$ {
fastcgi_keep_conn on;
fastcgi_intercept_errors on;
fastcgi_pass php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
# Cache Stuff
fastcgi_cache CACHE_NAME;
fastcgi_cache_valid 200 1440m;
add_header X-Cache $upstream_cache_status;
fastcgi_cache_methods GET HEAD;
fastcgi_cache_bypass $skip_cache;
fastcgi_no_cache $skip_cache;
add_header Z_ABCD "Test header";
if ($skip_cache = 1) {
add_header Cache-Control "private, no-cache, no-store";
add_header CACHE_STATUS "CACHE NOT USED";
}
if ($skip_cache = 0) {
add_header Cache-Control "public, s-maxage = 240";
expires 1d;
add_header CACHE_STATUS "USED CACHE";
}
add_header ANOTHER_HEADER "message";
}
}
我今天读到 OpenSSH 中存在一个重大漏洞,该漏洞已由最新版本 7.1p2 修复。根据这个故事,你的私钥很容易被泄露。
我正在使用最新的 Amazon Linux AMI,并且所有内容都针对 Amazon 的存储库是最新的。
[root@aws /]# ssh -V
OpenSSH_6.6.1p1, OpenSSL 1.0.1k-fips 8 Jan 2015
这是 Amazon yum 存储库中可用的软件包的列表
yum list | grep openssh
openssh.x86_64 6.6.1p1-22.58.amzn1 @amzn-updates
openssh-clients.x86_64 6.6.1p1-22.58.amzn1 @amzn-updates
openssh-server.x86_64 6.6.1p1-22.58.amzn1 @amzn-updates
openssh-keycat.x86_64 6.6.1p1-22.58.amzn1 amzn-updates
openssh-ldap.x86_64 6.6.1p1-22.58.amzn1 amzn-updates
看起来亚马逊存储库在 OpenSSH 更新方面落后了大约两年。我读到一些供应商支持旧版本 OpenSSH 的端口更新,所以这可能不是问题,或者亚马逊可能会很快解决它。
问题:
- 这真的是个问题吗?
- 如果有问题,最好的更新方法是什么?我通常会找到另一个 yum 存储库,增加它的优先级,然后从中更新。
我的一个网站有一个奇怪的情况,仍在 AWS 中开发。我在 t2.micro 上有 nginx 1.9.9 和 HHVM 3.6.6-1.amzn1.x86_64。它不可公开访问。
我在域的根目录中有一个自定义编写的网站,我在 /blog 目录中有 Wordpress,而 wordpress admin 在 /blog/wp-admin 中。自定义站点有各种文件,包括 index.php。Wordpress 在 blog 目录中有 index.php 和各种其他东西,wp-admin 也使用 index.php。
我可以加载自定义网站,它完全可以工作。WordPress 管理员完全可以工作。Wordpress 博客主屏幕/故事列表完全有效。问题是当我单击任何博客文章链接以完整查看它时,它会显示自定义网站主页索引。所以,换一种说法
http://www.example.com/index.php - custom website works
http://www.example.com/blog/index.php - blog index works
http://www.example.com/blog/2015/storyname - story load doesn't work with permalink %postname% regardless of text in post name - http://www.example.com/index.php loads
http://www.example.com/blog/2015/?p=96 - story load works
http://www.example.com/blog/wp-admin/ - admin works
当我单击故事链接时,我会得到与单击http://www.example.com/index.php相同的页面内容,只是图像不会加载,因为它们是使用相对 URL 完成的
http://www.example.com/blog/2015/storyname
当我加载站点根目录 /index.php 时,我会返回以下调试标头(请参阅下面的配置以了解它们是如何生成的)
Z_LOCATION: PHP MAIN
URI: /index.php
Z_DOCUMENT_ROOT: /var/www/hr
Z_FASTCGI_SCRIPT_NAME: /index.php
Z_REQUEST_FILENAME: /var/www/hr/index.php
当我加载 /wp-admin/ 我得到这些标题
Z_LOCATION: PHP MAIN
URI: /blog/wp-admin/index.php
Z_DOCUMENT_ROOT: /var/www/hr
Z_FASTCGI_SCRIPT_NAME: /blog/wp-admin/index.php
Z_REQUEST_FILENAME: /var/www/hr/blog/wp-admin/index.php
当我加载博客主页 /blog/index.php 时,我会返回这些标题
Z_LOCATION: PHP MAIN
URI: /blog/index.php
Z_DOCUMENT_ROOT: /var/www/hr
Z_FASTCGI_SCRIPT_NAME: /blog/index.php
Z_REQUEST_FILENAME: /var/www/hr/blog/index.php
当我尝试加载此 URL http://www.example.com/blog/2015/storyname时,我得到以下标题。Z_REQUEST_FILENAME(上图)显示加载的 URL 错误。
Z_LOCATION: PHP MAIN
URI: /index.php
Z_DOCUMENT_ROOT: /var/www/hr
Z_FASTCGI_SCRIPT_NAME: /index.php
Z_REQUEST_FILENAME: /var/www/hr/index.php
我不知道为什么当我单击该 URL 时它会尝试加载站点根目录 index.php。线索:
- 将 Wordpress 永久链接结构从 %postname% 更改为 ?p=123 可解决此问题
- 其他永久链接结构都没有帮助
为什么这只是查看博客文章的问题????我想知道这是否与try_files有关?
hhvm 错误日志中没有任何内容,nginx 错误日志中也没有任何内容。当我请求最后一个 URL 时,访问日志显示以下内容
(IP removed) - - [10/Jan/2016:08:22:19 +0000] "GET /blog/2015/storyname HTTP/1.1" 200 4424 "http://www.example.com/blog/" "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:43.0) Gecko/20100101 Firefox/43.0" "-" "0.050"
这是我的 nginx 站点配置。我没有包括主要的 nginx.conf 因为我认为它不相关。注意我已经更新了这项工作的工作代码。
server {
server_name www.example.com;
root /var/www/hr;
access_log /var/log/nginx/hr.access.log main;
# Default location to serve
location / {
try_files $uri $uri/ /blog/index.php?$args;
add_header Z_LOCATION "hr_root"; add_header URI $uri; # DEBUG
}
location ~* \.(jpg|jpeg|png|gif|css|js)$ {
log_not_found off; access_log off;
add_header Z_LOCATION "STATIC RESOURCES REGEX"; add_header URI $uri; # DEBUG
}
# Send HipHop and PHP requests to HHVM
location ~ \.(hh|php)$ {
fastcgi_keep_conn on;
fastcgi_intercept_errors on;
fastcgi_pass php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
# DEBUGGING
add_header Z_LOCATION "PHP MAIN"; add_header URI $uri;
add_header Z_DOCUMENT_ROOT "$document_root"; add_header Z_FASTCGI_SCRIPT_NAME "$fastcgi_script_name";
add_header Z_REQUEST_FILENAME "$request_filename";
}
}
# Forward non-www requests to www
server {
listen 0;
server_name example.com;
return 302 http://www.example.com$request_uri;
}
任何想法、想法或帮助表示赞赏。这是一个相当卷曲的,对我来说,但我怀疑这将是一个简单的改变来修复它。